您的位置:首页 > 运维架构 > Tomcat

运行环境为centos7,tomcat和mysql的优化方式,经验总结

2017-07-19 16:07 507 查看
一般在服务的cpu占用很高时,
1.使用ps -mp pid -o THREAD,tid,time命令查看该进程的线程情况,可以列举出占用高的线程,挑选个占用高的线程的tid,eg:挑选TID为14065的线程,查看该线程的堆栈情况,先将线程id转为16进制,使用printf "%x\n" tid命令进行转换(
printf "%x\n" 14065
)

再使用jstack命令打印线程堆栈信息,命令格式:jstack pid |grep tid -A 30(pid:进程id,tid:转换后的线程id的16进制),可以打印出堆栈信息,在堆栈信息中查看问题所在。
2.也可以使用jstack命令查看进程的堆栈情况
jstack 14063 >>jstack.out
3.若定位出的信息只是gc问题这类的,没有定位到问题代码,那么就在服务器的配置上进行下手优化,如果定位到是GC线程占用cpu高导致进程的占用高,可以尝试配置jvm的内存占用初始值和最大值,eg:JAVA_OPTS="-Xms1024m -Xmx4096m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=2048m",如果是优化tomcat的jvm,则可以在不影响服务器中其他程序运行的情况下,可以将tomcat的jvm尝试配置为服务器屋里内存的一半,在配置完成重启后使用top查看当前tomcat的进程的%mem是在不断增长的,但是增长到大概接近配置值后就不回再继续增长了。
4.优化tomcat:配置tomcat的最大连接数,配置连接池。配置协议为nio协议,并发会比默认的bio好些:
protocol="org.apache.coyote.http11.Http11NioProtocol"
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="2000" minSpareThreads="200"/>
<Connector port="1881" executor="tomcatThreadPool" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
URIEncoding="UTF-8"
redirectPort="8443"
/>
5.关系tomcat的日志:server.xml中
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
注释掉,这个配置是输出localhost日志的
,还有在catalina.sh文件中可以配置输出/dev/null
if [ -z "$CATALINA_OUT" ] ; then
#CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
CATALINA_OUT=/dev/null
fi
这样就不输出catalina的日志了。
6.mysql优化:修改mysql的最大连接数,可以在my.cnf中配置,这样配置在重启后不需要重新配置,也可以用语句配置set max_connections,这样配置每次重启后需要重新配置。
如果mysql的cpu占用很高的话,可以尝试优化wait_timeout的时间,默认是28800,如果在多个连接时,可能会无法释放等待的连接,但是配置释放时间时要记得将项目中配置的数据库连接池中的相关参数也进行配置
<!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->
<property name="removeAbandonedTimeout" value="150"/>

<!--maxWait: 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒-->
<property name="maxWait" value="3000"/>
否则代码进行连接后也无法对等待连接进行释放。

7.优化linux系统的time_wait连接的回收时间,
通过调整内核参数解决
   vi /etc/sysctl.conf
编辑文件,加入以下内容:
   net.ipv4.tcp_syncookies = 1
   net.ipv4.tcp_tw_reuse = 1
   net.ipv4.tcp_tw_recycle = 1
   net.ipv4.tcp_fin_timeout = 30
然后执行/sbin/sysctl -p让参数生效。

net.ipv4.tcp_syncookies = 1表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭;
net.ipv4.tcp_fin_timeout修改系統默认的TIMEOUT时间。
8.放开ulimit -n的值,系统默认打开文件数是1024,设置成ulimit -n 65535,这样可以增大系统可以被连接的数量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux mysql tomcat