Tomcat使用

常用命令

显示控制台日志
进入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.分析负载高的线程栈都是什么业务操作。优化程序并处理问题。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容