一次jdk1.7升级jdk1.8后致使redis运行时blocked_clients过多问题解决

公司有个采集项目,由于请求量较大,添加了redis集群,而且升级了原有的jdk1.7到jdk1.8版本,以后问题就出来了。java

1.程序运行一段时间就自动中止,必须重启才能再次运行。linux

2.redis链接监控查看,有大量链接阻塞,致使redis数据处理极慢,甚至不处理请求。redis

 

通过一段时间的排查才发现问题的关键——JDK启动参数设置问题tomcat

原jdk1.7启动设置为:jvm

java -jar -server -Xmx1024m -Xms1024m -Xmn256m
-Xss256k -XX:PermSize=128m /opt/source/crawler-storage/dev.crawler.storage1.jar > /opt/source/crawler-storage/info.out &

 

问题就发生在标红位置,升级为jdk1.8后仍是使用了这个启动参数,致使问题出现。spa

修改后jdk1.8启动参数后问题解决,其余参数也有修改,可是主要仍是这个永久代参数线程

/opt/jdk-1.8/jdk1.8.0_191/bin/java -jar -server -Xmx1024m -Xms1024m -Xmn256m -Xss256k -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC
/opt/source/crawler-storage/dev.crawler.storage1.jar > /opt/source/crawler-storage/info.out &

 

 

JDK内存
jdk内存实际是jvm内存,jvm有一个运行时数据区,其实就是对这一部分的大小分配。code

运行时数据区一般包括这几个部分:程序计数器(Program Counter Register)、Java栈(VM Stack)、本地方法栈(Native Method Stack)、方法区(Method Area)、堆(Heap)server

  Xss:每一个线程的stack大小(栈)
  Xmx:JAVA HEAP的最大值、默认为物理内存的1/4
  Xms:JAVA HEAP的初始值,server端最好Xms与Xmx同样
  Xmn:JAVA HEAP young区的大小
  XX:PermSize:设定内存的永久保存区域
  XX:MaxPermSize:设定最大内存的永久保存区域blog


在JDK1.8中,取消了PermGen,取而代之的是Metaspace,因此PermSize和MaxPermSize参数失效,取而代之的是

-XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=128m

 

修改JDK内存
linux下:在tomcat的bin目录下编辑catalina.sh
cygwin=false上面加入

JAVA_OPTS="-Xms1024m -Xmx1024m -Xss1024K -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize1024m"
相关文章
相关标签/搜索