关于Tomcat 的优化点之多,我估计没有上万,也有成千。不同的应用场景,不同的架构,不同的需求,都会对优化设置有不同要求。在这里我所记述的只是我自己在一些Tomcat 应用中所设置的优化项,以备不时之需,并不是放之四海而皆准的准则。 pom.xml对于maven 项目来说,pom.xml 设置是整个设置的核心,如果pom.xml 设置不当,虽然有时候也可以编译运行,但总是会出现一些令人讨厌的警告。为了消除这些警告,还需要根治pom.xml 。 重复依赖首先要解决的是重复依赖问题,有时候我们会在编译项目时遇到下面的这样的警告: 解决的方法很简单:在pom.xml 中搜索出现重复依赖的jar 包名称,你肯定会发现对于同一个jar 包,重复引用了多次,也许版本相同,也许版本不同,只要删除掉那些重复的就可以了。 maven编译器版本有时候会遇到下面这样的错误: 这意思是说你没有在pom.xml 里指定maven 的版本,在pom.xml 里添加maven 的版本就可以了: 重点是上面那个<version>3.5.1</version> 。 jdom有的时候会遇到一行简单的警告: 这个的意思是说在你的pom.xml 里,你需要把jdom 的groupId 改为org.jdom : activemq-spring下面这个警告不会在编译时出现,但是会在运行时出现,也非常恶心: 我们需要把pom.xml 里的activemq-all 改成activemq-spring : log4j.properties终于改完了pom.xml ,我们开始处理log4j。 xmemcached如果你使用了xmemcached ,那么日志里会不断地出现xmemcached 的警告,而这些警告对我们来说根本就不是警告,毫无意义,并且会掩盖真正的错误,所以我们通过修改log4j.properties 文件屏蔽它: 我这里比较野蛮粗暴地直接使用了OFF 选项,如果你不放心,可以改成ERROR 选项,效果是一样的。 webapp名称+%c如果你有多个webapp ,为了准确显示到底是哪个webapp 的哪个class 报的错,我们需要在log4j.properties 文件里注明我们的webapp 名称,再加上一个%c符号: 这样下回再有任何错误,我们可以第一时间迅速定位到到底是哪个webapp 的哪个class 出的错误。 logrotate如果我们不管不顾的话,Tomcat 的日志文件几乎会无限制增长,最终会耗尽我们的硬盘空间,所以我们需要用logrotate 来限制它一下,在/etc/logrotate.d 文件夹下创建一个文件tomcat : setenv.shTomcat 不问青红皂白,上来就要占领我们主机整个物理内存的四分之一,我们需要限制它的大小,宁可浪费一些CPU 和硬盘的时间去让它不断地垃圾回收,也不想让它占用这么多的内存,所以我们需要在/opt/tomcat/bin 下建立一个setenv.sh 文件,强制让它最多占用1G 内存:
这样我们一台16G 内存的主机,可以同时运行16 个Tomcat ,而不像以前,最多只能同时运行4 个Tomcat 。 jarsToSkipTomcat 启动时会不断地扫描所有.jar 文件,并且报一些不知所谓的警告:
直接在/opt/tomcat/conf/catalina.properties 文件里把这一句话改成: 这个世界终于清静了,扫什么扫,有什么可扫的! startStopThreads当你有多个webapp 的时候,Tomcat 缺省会启完一个webapp 再启下一个,这样太慢了,不可忍受,我们在/opt/tomcat/conf/server.xml 文件里把它的启动线程数直接干到20 个: Dubbo有时候Dubbo 也会跳出来捣乱,在每一个不同的webapp 下的consumer.xml 文件里指定file : 每个webapp 的file 名称各不相同,它们再也不会互相打架了。
|