起源 这次的事情来源于之前tomcat的一个问题:tomcat总是用着用着就报非堆内存溢出。这次刚好有机会就想把这个问题解决,顺便把服务器调下优。
现象及解决办法 tomcat到底报的是什么错呢,就是这样的错。
OutOfMemoryError: PermGen space非堆溢出(永久保存区域溢出)(抱歉图找不到了,就用这个代替)
网上查找资料之后是因为jar包太多了,超过了上限。
既然如此,那么就有以下几个办法:
- 增大上限
- 减少jar包
增大上限
网上的而说法是这样
文章图片
原文链接:http://blog.csdn.net/ye1992/article/details/9344807
抱歉,我按照上面的办法设置后项目就无法正常运行了,所以就没用采用这种办法,我用的是第二种办法:减少jar包
减少jar包
tomcat有这样一种方式可以共享类库以便多个项目使用,具体方法网上一大堆(这里不得不吐槽,即使是CSDN也是大量的抄袭,我找到的答案几乎是一个版本,而关键是这个版本有错误),网上的解决办法一般是这个
文章图片
原文链接:http://blog.csdn.net/xiaoyu19910321/article/details/52092754
文中的原意其实是正确的,但是表达有问题,而且也不太规范。
正确且规范的操作是这样的
文章图片
首先像这样建文件夹:server/lib; shared/lib。
然后将项目的jar包全部放到shared/lib下,放在另一个也可以,他们只是运行的顺序不一样而已,像这样。
文章图片
然后删除所有项目web_inf/lib下的jar包,对了,这里有个前提,就是你所有的项目用的jar包大部分一样,少量不一样的可以仍然放在web_inf/lib下,我的情况是所有的项目用的是一模一样的jar包,所以我就全部拷走了。
最后更改tomcat配置。
文章图片
修改apache-tomcat-6.0.37\conf\catalina.properties这个文件,按上图修改就行了。
至此基本上就完成了,但是在运行是我的tomcat报错了:Proxool Provider unable to load JAXP configurator file: proxoolconf.xml
而且很奇怪的是第一个正常,其余的全部错误。
网上的解决办法千篇一律都是说webappKey的问题,但我改了之后问题仍然存在。(再次吐槽网上大量的抄袭现象)
在仔细查看错误报告后发现一个共同点,里面报的很多错误都说找不到DBPool这个连接池,这是我的连接池的名字,这时我想到是否是因为我每个项目的连接池都起这个名字而导致找不到呢,故我给每个项目的连接池改成了不同的名字,最后就正常了。而且运行非常好。
题外话,tomcat调优
这个也是我在网上找的,为什么要调呢,因为tomcat不调的话只适合调试项目,如果想长时间稳定运行的话必须得调,具体方法我也是在网上找的资源。
原文链接:http://blog.csdn.net/ldx891113/article/details/51735171
【java|Tomcat使用共享类库后只有第一个项目运行正常问题解决】我是按照文中的方法来调整的,目前一切正常,效果还待日后观察。
推荐阅读
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- Spring注解驱动第十讲--@Autowired使用
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)