码迷,mamicode.com
首页 > 其他好文 > 详细

tomcat 性能优化

时间:2019-01-06 11:16:38      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:install   监控tomcat   不一致   cal   template   https   端口   客户端   byte   

Tomcat 性能优化

硬件资源优化

比如内存,硬盘

架构上的优化

利用缓存和压缩 在nginx前端
做动静分离 缓解tomcat压力
搭建集群 采用nginx请求分流

JVM参数调优

优化文件: /usr/local/tomcat/bin/catalina.sh

CATALINA_OPTS="
server 
Xms6000M 
Xmx6000M 
Xss512k 
XX:NewSize=2250M 
XX:MaxNewSize=2250M 
XX:PermSize=128M
XX:MaxPermSize=256M 
XX:+AggressiveOpts 
XX:+UseBiasedLocking 
XX:+DisableExplicitGC 
XX:+UseParNewGC 
XX:+UseConcMarkSweepGC 
XX:MaxTenuringThreshold=31 
XX:+CMSParallelRemarkEnabled 
XX:+UseCMSCompactAtFullCollection 
XX:LargePageSizeInBytes=128m 
XX:+UseFastAccessorMethods 
XX:+UseCMSInitiatingOccupancyOnly
Duser.timezone=Asia/Shanghai 
Djava.awt.headless=true"

参数的详细配置,参考:http://blog.51cto.com/zhongliang/2101918

Tomcat 参数优化

这里着重讲解tomcat参数的优化:server.xml文件,
关闭DNS查询、配置最大并发等参数。
maxThreads:tomcat起动的最大线程数,即同时处理的任务个数,默认值为200
acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100
当然这些值都不是越大越好,需要根据实际情况来设定。可以基于测试的基础上来不断的调优分析。

<Connector port="8080"   
protocol="org.apache.coyote.http11.Http11NioProtocol"  
connectionTimeout="20000"     连接超时
redirectPort="8443"           
maxThreads="500"        最大线程   就是最大并发数
minSpareThreads="20"        最小空闲线程数
acceptCount="100"        队列大小  等待处理的
disableUploadTimeout="true"     类似于Apache中的keeyalive一样
enableLookups="false"   关闭DNS查询
URIEncoding="UTF-8" /> 
maxSpareThreads :     最大空闲线程数      
acceptCount是当线程数达到maxThreads后,后续请求会被放入一个等待队列,这个acceptCount是这个队列的大小,如果这个队列也满了,就直接refuse connection
压缩compression=”on” compressionMinSize=”2048″        compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”

外部调优

禁用DNS查询
调整线程数(线程池)
maxThreads="600"   最大线程数
minSpareThreads="100"   初始化时创建的线程数
maxSpareThreads="500"  一旦创建的线程越过这个值,Tomcat就会关闭不再需要的socket线程
acceptCount="700"  指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理              

java工具 监控和管理控制台

在windows端安装jdk包,找到以下命令
在c:\ Program Files\jdk\bin\jconsole.exe   监控和管理控制台
通过IP:端口连接到监控和JAVA控制台
在c:\ Program Files\jdk\bin\jvisualvm.exe 
通过IP:端口连接   管理工具

在tomcat服务器上修改配置文件 
catalina.sh中加入配置,放置在#!/bin/bash标签下
vim /usr/local/tomcat8/bin/catalina.sh

!/bin/bash
CATALINA_OPTS="$CATALINA_OPTS
Djava.rmi.server.hostname=10.204.3.7 
Dcom.sun.management.jmxremote
Dcom.sun.management.jmxremote.port=12345
Dcom.sun.management.jmxremote.authenticate=true
Dcom.sun.management.jmxremote.ssl=false
Dcom.sun.management.jmxremote.pwd.file=/usr/local/jdk1.7/jre/lib/management/jmxremote.password"

配置权限文件

cd /usr/local/jdk1.7/jre/lib/management/
cp jmxremote.password.template jmxremote.password
vi jmxremote.password
zhongliang 123456           # 用户名zhongliang  密码249765270
chmod 600 jmxremote.password

重启tomcat服务,开启监听端口12345

连接jconsole和jvisualvm

输入远程主机:端口 10.204.3.7:12345

选择文件—》添加JMX..连接—》10.204.3.7:12345

CPU使用情况 堆,垃级回收 抽样器
实时线程数

注意:在控制台上执行GC清理的时候,会出现前端断连

Zabbix监控tomcat

zabbix编译的时候,指定--enable-java 
yum安装的时候,yum install zabbix-java

vim zabbix_server.conf
JavaGateway=192.168.3.14
JavaGatewayPort=10052
StartJavaPollers=5

第三方工具,cmdline-jmxclient
    http://crawler.archive.org/cmdline-jmxclient/

Apache整合tomcat

安装httpd
安装tomcat
编译生成mod_jk。
下载tomcat-connectors-1.2.42-src.tar.gz包
Wget -c https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.42-src.tar.gz

tar xzvf tomcat-connectors-1.2.42-src.tar.gz
cd tomcat-connectors-1.2.42/native
./configure --with-apxs=/usr/local/apache2/bin/apxs
make
cp ./apache-2.0/mod_jk.so /usr/local/apache/modules/

配置。
在/usr/local/apache/conf/下面建立两个配置文件mod_jk.conf和workers.properties。

vi mod_jk.conf#######################
添加以下内容:
指出mod_jk模块工作所需要的工作文件workers.properties的位置
JkWorkersFile /usr/local/apache/conf/workers.properties

Where to put jk logs
JkLogFile /usr/local/apache/logs/mod_jk.log

Set the jk log level [debug/error/info]
JkLogLevel info

Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"

JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"

将所有servlet 和jsp请求通过ajp13的协议送给Tomcat,让Tomcat来处理
JkMount /servlet/* worker1
JkMount /*.jsp worker1

.

vi workers.properties###########################
添加以下内容:
Defining a worker named worker1 and of type ajp13
worker.list=worker1

Set properties for worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.cachesize=10
worker.worker1.cache_timeout=600
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300

.

整合apache和tomcat

Vim httpd.conf#############
DirectoryIndex index.jsp index.html
添加index.jsp
LoadModule jk_module modules/mod_jk.so
加载mod_jk.so模块
Include /usr/local/apache/conf/mod_jk.conf
引入配置文件

将tomcat和apache的发布目录设置成一致。建立站点文件index.jsp

Nginx整合Tomcat 集群

T_INSTALL_DIR=/usr/local/tomcat
Port=`export 8005+1`
复制多个tomcat到tomcat1 tomcat2 tomcat3

修改对应每个发布目录的端口

安装nginx
tar zxvf nginx-1.7.8.tar.gz  //解压
cd nginx-1.7.8
./configure --with-http_stub_status_module --with-http_ssl_module//启动server状态页和https模块
make && make install

修改nginx.conf配置文件,添加一个location
location ~  \.(jsp|do)$  {  
            index   index.jsp;
                proxy_pass http://192.168.74.129:8081;  //来自jsp或者do的后缀的请求交给tomcat处理</span>
proxy_redirect off;  
proxy_set_header Host $host;    //后端的Web服务器可以通过X-Forwarded-For获取用户真实IP  
proxy_set_header X-Real-IP $remote_addr;  
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
client_max_body_size 10m;   //允许客户端请求的最大单文件字节数  
client_body_buffer_size 128k; //缓冲区代理缓冲用户端请求的最大字节数  
proxy_connect_timeout 90;   //nginx跟后端服务器连接超时时间  
proxy_read_timeout 90;     //连接成功后,后端服务器响应时间  
proxy_buffer_size 4k;      //设置代理服务器(nginx)保存用户头信息的缓冲区大小  
proxy_buffers  6  32k;       //proxy_buffers缓冲区,网页平均在32k以下的话,这样设置  
proxy_busy_buffers_size 64k;//高负荷下缓冲大小(proxy_buffers*2)  
proxy_temp_file_write_size 64k; //设定缓存文件夹大小,大于这个值,将从upstream服务器传  
}  

Tomcat故障

日志文件
/usr/local/tomcat/logs/catalina.out

【注】:tomcat查端口时正常,服务正常,但访问后,服务消失,
问题原因:因为配置文件不正确,导致报错,服务自动停止
解决方法:检查配置文件
例如:配置文件中没有定义发布目录,但是发布目录中的ROOT已被删除,会导致此类问题发生

15.1 cannot execute binary file

/usr/local/tomcat8/bin/catalina.sh: line 433: /usr/local/jdk1.8/bin/java: cannot execute binary file

[root@tomcat01 local]# java --version
bash: /usr/local/jdk1.8/bin/java: cannot execute binary file

原因:软件版本与系统版本不一致

15.2 insufficient free space available after evicting expired cache entries-consider increasing the maximum size of the cache.

tomcat部署jenkins启动报错:

insufficient free space available after evicting expired cache entries-consider increasing the maximum size of the cache.

解决该问题方法,修改tomcat/conf/context.xml文件,增加资源最大可缓存的大小:
<Resources
cachingAllowed="true"
cacheMaxSize="102400"
/>

tomcat 性能优化

标签:install   监控tomcat   不一致   cal   template   https   端口   客户端   byte   

原文地址:http://blog.51cto.com/zhongliang/2339299

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!