ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# Tomcat监控和调优 [TOC] ## 一、命令或函数监控方法 ### 1.tomcat自带函数检测 可以使用memtest.war这个文件中的meminfo.jsp进行监控内存,里面已经调用tomcat自带的命令写好了一个脚本 ### 2.jps命令[※] JDK包自带的命令,主要用来输出jvm中运行的进程状态信息 1)语法格式: ```sh jps [options] [hostid] ``` 如果不指定hostid就默认为当前主机或服务器。 参数说明: ``` -q 不输出类名、Jar名和传入main方法的参数 -m 输出传入main方法的参数 -l 输出main类或Jar的全名 -v 输出传入JVM的参数 ``` 2)用法示例 快速获取Java进程的pid,不用ps和grep ``` [root@xxx ~]# jps -lvm 10779 sun.tools.jps.Jps -lvm -Denv.class.path=..:/application/jdk/lib:/application/jdk/jre/lib:/application/jdk/lib/tools.jar:/application/jdk/lib:/application/jdk/jre/lib:/application/jdk/lib/tools.jar -Dapplication.home=/application/jdk1.8.0_60 -Xms8m ``` ### 3.show-busy-java-threads脚本[※] 此脚本是一个比较著名的脚本,执行后可以排序显示繁忙的java程序的信息,一般用来排查故障,如下 ![mark](http://noah-pic.oss-cn-chengdu.aliyuncs.com/pic/20200306/120831865.png) ### 4.jstack监控[※] jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多。 上面的脚本知道繁忙的线程后,后jstack命令获取详细信息然后发给开发或自己研究 ``` jstack 73855 >/tmp/busy_java.log ``` ### 5.jsconslse和jvisualvm windows下jdk安装后附带的图形监控工具。c:\program files\java\jdk1.8.0_31\bin ![mark](http://noah-pic.oss-cn-chengdu.aliyuncs.com/pic/20200306/120843972.png) ## 二、zabbix监控tomcat ### 1.监控流程 数据获取流程:java poller《——》javagateway:10052《——》tomcat:12345 1. zabbix_server开启java poller 2. zabbix_java开启javagateway,端口为10052 3. tomcat开启12345端口提供性能数据 ### 2.安装依赖程序 ``` #yum源-centos6 rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/6/x86_64/zabbix-release-3.0-1.el6.noarch.rpm #yum源-centos7 rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm ``` yum安装的zabbix需要增加安装以下程序 ``` yum install -y java java-devel zabbix-java-gateway ``` >源码安装的时候需要加--enable-java,如果安装的时候没有此参数需要重新编译 ### 3.开启tomcat远程监控功能 1)修改tomcat配置 需要tomcat开启远程监控功能,开启方法如下 ``` [root@xxx ~]# vim /application/tomcat/bin/catalina.sh +97 CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.0.0.3" ``` 2)做hosts解析并重启tomcat hosts解析--略 ``` /app/tomcat/bin/shutdown.sh /app/tomcat/bin/startup.sh ``` ### 4.启动zabbix(server和javagateway) 1)修改server配置文件 ``` sed -ri 's#\# (JavaGateway=)#\1 127.0.0.1#g' /etc/zabbix/zabbix_server.conf sed -ri 's#\# (StartJavaPollers=)0#\1 5#g' /etc/zabbix/zabbix_server.conf ``` 2)启动服务 ``` /etc/init.d/zabbix_server restart /etc/init.d/zabbix-java-gateway start ``` ### 5.zabbix图形界面添加客户端 在zabbix图形界面上,添加JMX类型的客户端,并了解java模板即可,截图略 ## 三、Tomcat性能优化 ### 1.屏蔽dns查询 ``` vim /app/tomcat/conf/server.xml +70 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="6000" enableLookups="false" acceptCount="800" redirectPort="8443" /> ``` ### 2.jvm调优 Tomcat最吃内存,只要内存足够,这只猫就跑的很快。如果系统资源有限,那就需要进行调优,提高资源使用率。 **优化catalina.sh配置文件。** 在catalina.sh配置文件中添加以下代码: ```sh JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m" ``` **堆栈参数:** ```sh server:一定要作为第一个参数,在多个CPU时性能佳 -Xms:初始堆内存Heap大小,使用的最小内存,cpu性能高时此值应设的大一些 -Xmx:初始堆内存heap最大值,使用的最大内存 上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半。 -XX:PermSize:设定内存的永久保存区域 -XX:MaxPermSize:设定最大内存的永久保存区域 -XX:NewSize: 设定堆区域新生代内存的大小 -XX:MaxNewSize: 设定堆区域新生代内存的最大可分配大小 ``` 其他参数 ```sh -Xss 15120 这使得JBoss每增加一个线程(thread)就会立即消耗15M内存,而最佳值应该是128K,默认值好像是512k. +XX:AggressiveHeap 会使得 Xms没有意义。这个参数让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。 -Xss:每个线程的Stack大小 -verbose:gc 现实垃圾收集信息 -Xloggc:gc.log 指定垃圾收集日志文件 -Xmn:young generation的heap大小,一般设置为Xmx的3、4分之一 -XX:+UseParNewGC :缩短minor收集的时间 -XX:+UseConcMarkSweepGC :缩短major收集的时间 ```