zoukankan      html  css  js  c++  java
  • 一次jdk1.7升级jdk1.8后导致redis运行时blocked_clients过多问题解决

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

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

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

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

    原jdk1.7启动设置为:

    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后还是使用了这个启动参数,导致问题出现。

    修改后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有一个运行时数据区,其实就是对这一部分的大小分配。

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

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


    在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"



  • 相关阅读:
    Python进阶08 生成器
    Python进阶07 迭代
    Python进阶06 列表推导
    Python进阶05 函数property
    Python基础14 集合
    支付宝支付和微信消息推送
    Redis
    django之contenttype
    数据分析系列
    IPython
  • 原文地址:https://www.cnblogs.com/dannylinux/p/10757547.html
Copyright © 2011-2022 走看看