其实这个应该不算问题,是一个tomcat中的一个机制。
问题描述:
我前些天完成了一个用户3步自定义建站的功能模块。大致介绍一下:
用户登录,在页面表单中输入站点的一些基本信息,选择logo,单击创建,一个自定义站点就在服务器上的tomcat中的webapp目录下创建成功,用户可以转回到站点列表中单击刚才生成的站点链接即时访问站点。
这个模块除了权限控制外的难点主要有下面2点:
1)编辑站点名称时,对tomcat下的webapp目录中的站点文件夹重命名。
2)用户即时访问站点。
上面的难处都跟tomcat的资源锁有关系。
为了能实现用户即时访问新建站点(无需重启tomcat),我在模块中配了一个context.xml文件,配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context reloadable="true" antiJARLocking="true" antiResourceLocking="false">
</Context>
最开始的配置是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<Context reloadable="true" antiJARLocking="true" antiResourceLocking="true">
</Context>
按照最开始的配置没有这些问题,因为上面配置文件中的 xxxLocking 设置成 true的话,已经将tomcat的资源锁打开,这样就不存在资源被锁的问题。但是部署项目测试几次后发现服务器的磁盘已经被吃的只剩下5M,妈妈咪,太吓人了。以为是中毒了,后来在g.cn上发现,都是context.xml配置的问题。将资源锁打开后,项目文件会在tomcat的temp文件夹下面自动生成一个该项目的临时拷贝,而且不会自动删除。由于用于新建站点的模版比较大,所以就出现了服务器上的磁盘被狂吃的情况。
之后把context.xml文件配置改成如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context reloadable="true" antiJARLocking="false" antiResourceLocking="false">
</Context>
改完配置后测试发现站点文件夹名称重命名失败,renameTo()方法总是返回false.莫名其妙。经过痛苦的Debug和Search后发现原来是资源锁没打开的原因。这个问题到现在还没有解决,总之还是期待有缘人吧。
那么为什么context.xml文件的配置会改成如下呢?
<?xml version="1.0" encoding="UTF-8"?>
<Context reloadable="true" antiJARLocking="true" antiResourceLocking="false">
</Context>
原因是,在删除站点的时候明明提示webapp下面的相关文件已经全部删除,但是去webapp目录下看总是会留下a/WEB-INF/lib/之后是该项目的jar包。(a表示站点名称) 之后看了配置文件,明白了,原来jar包锁设置为false,在项目热启动后会将原来删除的jar重新加载进来,至于资源锁设置为false,而删除的资源没有重新加载就没弄清楚真相,但是想想也对。如果删除的资源也能重加载那就比较恐怖了。所以为了将项目删干净,便将jar包的锁打开。
现在该模块除了不能修改站点名字(最恨的是修改名字有时成功,有时失败。最恨这种概率性的错误),其他都还算比较成功。
分享到:
相关推荐
10. **故障排除**:当遇到问题时,通常会查看服务器的错误日志,检查系统资源使用情况,或者使用`netstat`、`lsof`等命令检查网络连接和文件锁。 以上就是关于"Tomcat5 Linux 版"的主要知识点,涵盖了从安装、配置...
- 分布式锁:在多线程或多服务器环境下,Redis可以作为分布式锁,确保并发操作的安全。 4. **性能优化** - 连接池管理:合理配置连接池大小,避免资源浪费和连接溢出。 - 数据结构选择:根据业务场景选择合适的...
这样,应用程序就能通过DataSource安全、高效地获取和释放数据库连接,而无需每次手动创建和关闭连接,避免了资源浪费和潜在的数据库连接泄露问题。 综上所述,"db+Tomcat DataSource"涉及到Oracle数据库的安装与...
通过使用这个连接池,开发者可以有效地管理数据库连接,避免资源浪费,提高应用性能。例如,它支持预热连接,即在应用启动时初始化一定数量的连接,以减少第一次数据库请求的延迟。此外,它还支持自动重试操作,当...
部署这个监控应用到Tomcat的过程非常简单,只需要将WAR文件放入Tomcat安装目录下的`webapps`文件夹。Tomcat会自动检测到新文件并进行解压和部署。一旦部署完成,用户可以通过Web浏览器访问Tomcat服务器的特定URL来...
在Java Web开发中,Tomcat是一个广泛...综上所述,理解Tomcat中的多线程处理对于优化Servlet性能和解决潜在的并发问题至关重要。通过对线程池的配置和使用最佳实践,开发者可以有效地提高Web应用的响应速度和可伸缩性。
SQLITE数据库虽然主要用于单用户场景,但也支持多用户的并发访问,并通过锁机制解决并发问题。 **5. 连接池** 数据库连接池是一种缓存机制,用于管理和复用一组数据库连接。它可以显著减少连接建立和关闭的开销,...
首先,Tomcat JDBC连接池是Apache Tomcat项目的一部分,它提供了对JDBC数据源的管理,旨在提高数据库连接的效率和资源利用率。在7.0.42版本中,该库已经相当成熟,能够有效地处理并发请求,提供各种性能调整选项,...
通过JMX,开发者可以监控Tomcat的运行状态、性能和资源使用情况。 在配置JMX监控时,需要在Tomcat中添加JMX连接配置参数。这包括设置JMX端口、用户名和密码等参数。例如,在Windows平台下,可以在catalina.bat文件...
除了基础配置外,Tomcat JDBC Pool还提供了许多高级配置选项,如公平锁策略、空闲检测间隔、连接验证等,可以根据具体需求进行调整以优化性能和资源利用率。同时,还可以通过监控JMX接口查看连接池的运行状态,以...
本文将详细介绍一个关于Windows环境下Tomcat优化的具体方案,通过调整JVM参数和其他配置来提高Tomcat的稳定性和响应速度。 #### 二、Tomcat优化策略 ##### 1. Tomcat启动脚本调整 在`tomcat/bin/catalina.bat`文件...
你需要SQL Server的JDBC驱动(如jtds.jar)在Tomcat的lib目录下,以便Tomcat能够与SQL Server通信。 2. **配置Tomcat服务器**: 打开Tomcat安装目录下的`conf/server.xml`文件。在`<Host>`或`<Context>`标签内...
4. **同步机制**:为了保证并发环境下的安全,`WebappClassLoader`使用锁机制来控制对类加载的访问,避免了多线程环境下可能出现的问题。 5. **生命周期管理**:当Web应用停止时,`WebappClassLoader`需要卸载加载...
代码优化是提高Java应用性能的一个重要方面,包括但不限于算法优化、数据结构优化、循环优化、异常处理优化、减少同步锁的使用等。有效的代码优化可以显著提高程序的运行速度和资源利用率。 在文档的最后提到了...
同时,对于静态资源,可以直接由Apache服务器提供,减少对Tomcat的压力。 总之,Apache Tomcat的负载均衡和集群配置是提升Web应用程序性能和可靠性的关键步骤。通过合理配置`mod_jk.conf`、`workers.properties`...
这些参数调整可以进一步提升Tomcat处理请求的能力,降低响应时间,并减少资源浪费。 四、Oracle数据库参数优化 在高并发场景下,Oracle数据库的参数调整同样重要。这可能包括表空间管理、索引优化、查询优化器设置...
15. `-Djava.awt.headless=true`: 无头模式,避免在非图形界面环境下的问题。 其次,我们关注`server.xml`中的服务器参数优化: 1. `<Connector>`标签:定义Tomcat的连接器,如设置端口号`port`,协议`protocol`,...
- **减少资源争用**:通过合理的锁管理和并发控制策略,减少数据库中的资源争用情况。 #### 七、Web|APP优化方法 - **页面简化**:减少不必要的HTML元素和JavaScript脚本,加快页面加载速度。 - **表单压缩**:...