常用命令
显示控制台日志
进入tomcat/logs/文件夹下
tail -f catalina.out
安装
基本配置
优化
Tomcat内存优化
在启动脚本 catalina.sh/catalina.bat 中设置 java_OPTS 参数完成内存优化的;
JAVA_OPTS="-Xms1024m -Xmx2048m -XX:PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m"
服务器内存在2G以上,这里没有考虑多个节点的问题;
参数说明:
-Xms [Java]虚拟机初始化时的最小内存;
-Xmx java虚拟机可使用的最大内存;
-XX: PermSize 内存永久保留区域;
-XX:MaxPermSize 内存最大永久保留区域
并发数优化
修改conf目录下的server.xml文件;
默认:
<Connector
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
/>
修改为:
<Connector port="9027"
protocol="HTTP/1.1"
maxHttpHeaderSize="8192"
maxThreads="1000"
minSpareThreads="100"
maxSpareThreads="1000"
minProcessors="100"
maxProcessors="1000"
enableLookups="false"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
connectionTimeout="20000"
URIEncoding="utf-8"
acceptCount="1000"
redirectPort="8443"
disableUploadTimeout="true"/>
参数说明:
maxThreads 客户请求最大线程数
minSpareThreads Tomcat初始化时创建的 socket 线程数
maxSpareThreads Tomcat连接器的最大空闲 socket 线程数
enableLookups 若设为true, 则支持域名解析,可把 ip 地址解析为主机名
redirectPort 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口
acceptAccount 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads )
connectionTimeout 连接超时
minProcessors 服务器创建时的最小处理线程数
maxProcessors 服务器同时最大处理线程数
URIEncoding URL统一编码
minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为 10
maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为 75
acceptCount:允许的最大连接数,应大于等于 maxProcessors ,默认值为 100
enableLookups:是否反查域名,取值为: true 或 false 。为了提高处理能力,应设置为 false
connectionTimeout:网络连接超时,单位:毫秒。设置为 0 表示永不超时,这样设置有隐患的。通常可设置为 30000 毫秒。
其中和最大连接数相关的参数为maxProcessors 和 acceptCount 。如果要加大并发连接数,应同时加大这两个参数。
web server允许的最大连接数还受制于操作系统的内核参数设置,通常 Windows 是 2000 个左右, Linux 是 1000 个左右。
connectionTimeout 连接超时
性能监控
查看tomcat已经使用的线程数
ps aux |grep tomcat //先 查看tomcat的PID
ps -T -p <PID> //根据pid查看tomcat下的线程数
日常维护
强制停止tomcat运行,在./shutdown.sh不好用的情况下
ps -ef |grep tomcat //看是否已经有tomcat在运行了
kill -9 pid //如果有,用kill;pid为相应的进程号
例如 pe -ef |grep tomcat 输出如下
sun 5144 1 0 10:21 pts/1 00:00:06 /java/jdk/bin/java -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/java/tomcat/common/endorsed -classpath :/java/tomcat/bin/bootstrap.jar:/java/tomcat/bin/commons-logging-api.jar -Dcatalina.base=/java/tomcat -Dcatalina.home=/java/tomcat -Djava.io.tmpdir=/java/tomcat/temp org.apache.catalina.startup.Bootstrap start
则 5144 就为进程号 pid = 5144
kill -9 5144 就可以彻底杀死tomcat
解决tomcat占用cpu高的问题
1.jps 获取Java进程的PID。
2.top -H -p PID 查看对应进程的哪个线程占用CPU过高。
2.1 使用 ps -mp pid -o THREAD,tid,time 命令查看该进程的线程情况,发现该进程的多个线程占用率很高。
3.jstack pid >> java.txt 导出CPU占用高进程的线程栈。
使用jstack命令查看进程的堆栈情况
4.echo “obase=16; PID” | bc 将线程的PID转换为16进制。
5.在第二步导出的Java.txt中查找转换成为16进制的线程PID。找到对应的线程栈。
6.分析负载高的线程栈都是什么业务操作。优化程序并处理问题。
网友评论