一次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"

 

 



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM