linux環境JVM內存死鎖問題分析

最近在一次壓力測試問題分析中,發現運行在tomcat的應用,不管上多少個vuser模擬請求壓力,只會耗用200%的cpu,測出應用的tps很低,近10次每秒。經過分析,不是網卡的瓶頸,於是懷疑是內存鎖的問題,於是就以下操作與分析。

步驟一:在linux環境上執行jstack -l 線程號 >線程號.log

步驟二:從.log發現如下問題0x0000000751968760 的內存變量一個鎖住,另一個在獲取鎖。出現死鎖問題。
"http-apr-8090-exec-3898" daemon prio=10 tid=0x00007fa47e67b800 nid=0x192ac waiting for monitor entry [0x00007fa2eb978000]
   java.lang.Thread.State: BLOCKED (on object monitor)
at org.apache.log4j.Category.callAppenders(Category.java:204)
- parking to wait for  <0x0000000751968760> (a org.apache.log4j.Logger)
at org.apache.log4j.Category.forcedLog(Category.java:391)
at org.apache.log4j.Category.log(Category.java:856)
at com.xx.esi.log.logger.log4j.Log4jLogger.info(Log4jLogger.java:45)
at com.xx.esi.log.logger.support.FailsafeLogger.info(FailsafeLogger.java:119)
at com.xx.cb.web.servlet.HttpService.doPost(HttpService.java:116)



"http-apr-8090-exec-3315" daemon prio=10 tid=0x00007fa47c7f4800 nid=0x19064 runnable [0x00007fa2f608a000]
   java.lang.Thread.State: RUNNABLE
at java.util.Arrays.copyOf(Arrays.java:2367)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:130)
at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:114)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:415)
at java.lang.StringBuffer.append(StringBuffer.java:237)
- locked <0x000000071fe7ee58> (a java.lang.StringBuffer)
at org.apache.log4j.helpers.PatternParser$LiteralPatternConverter.format(PatternParser.java:419)
at org.apache.log4j.PatternLayout.format(PatternLayout.java:506)
at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:310)
at org.apache.log4j.DailyRollingFileAppender.subAppend(DailyRollingFileAppender.java:369)
at org.apache.log4j.WriterAppender.append(WriterAppender.java:162)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
- locked <0x0000000751d00418> (a org.apache.log4j.DailyRollingFileAppender)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
at org.apache.log4j.Category.callAppenders(Category.java:206)
- locked <0x0000000751968760> (a org.apache.log4j.Logger)
at com.xx.cb.web.servlet.HttpService.doPost(HttpService.java:116)
步驟三:解決以上代碼缺陷。
發佈了39 篇原創文章 · 獲贊 1 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章