校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 一次tomcat自動關閉的bug解決

一次tomcat自動關閉的bug解決

熱門標簽:蕪湖呼叫中心外呼系統哪家強 天津外呼系統運營商 貴陽語音電銷機器人 ec外呼系統怎么樣 漯河電銷外呼系統價格 電銷機器人怎么錄音 咸陽穩定外呼系統公司 征服者快捷酒店地圖標注 貴港市機器人外呼系統團隊

前言

最近一個運行了4年的javaee web項目,經常接到客戶反饋系統無法打開。登錄服務器查看服務,發現是tomcat自動關閉了。基本是3到4天發生一次。

運維人員開始以為是其他服務殺死了tomcat服務,沒放在心上,解決方法就是直接重啟tomcat。

最終捅了簍子,運維人員被客戶投訴,扣了一個月的績效。

解決這個bug兜兜轉轉來到了我這里。既然接到任務,那就開干,沒有解決不了的bug。

系統的運行環境如下:

  • tomcat6.0
  • 32位jdk7.0
  • window server2003 32位,32G內存。

查看日志,如果tomcat閃崩,都會在tomcat的bin目錄下生成以"hs_err"開頭的日志文件。打開最新的日志文件,首先看到的是下面一段話:

# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 32756 bytes for ChunkPool::allocate
# Possible reasons:
# The system is out of physical RAM or swap space
# In 32 bit mode, the process size limit was hit
# Possible solutions:
# Reduce memory load on the system
# Increase physical memory or swap space
# Check if swap backing store is full
# Use 64 bit Java on a 64 bit OS
# Decrease Java heap size (-Xmx/-Xms)
# Decrease number of Java threads
# Decrease Java thread stack sizes (-Xss)
# Set larger code cache with -XX:ReservedCodeCacheSize=
# This output file may be truncated or incomplete.
#
# Out of Memory Error (allocation.cpp:211), pid=7864, tid=6556
#
# JRE version: Java(TM) SE Runtime Environment (7.0_79-b15) (build 1.7.0_79-b15)
# Java VM: Java HotSpot(TM) Server VM (24.79-b02 mixed mode windows-x86 )
# Failed to write core dump. 

大概意思就是內存不夠了,無法分配32756字節的空間。同時給出幾個解決方法:

1、減少系統內存負載;

2、增加物理內存或者交換空間;

3、在64位操作系統上使用64位jdk;

4、減少java heap大小;

5、減少java線程數量;

6、減少java線程堆棧大小。

通過上面的內容可以得出,jvm無法分配32756 bytes的內存空間。

從接到任務開始,我一直以為是jvm配置出錯,導致內存不夠用,只需調整下新生代、老年代的配置即可。

繼續往下看日志文件,找到"GC Heap History (10 events):"這一行,這個記錄jvm最后10次垃圾回收時堆的變化情況。

GC Heap History (10 events):
Event: 572312.299 GC heap before
{Heap before GC invocations=5046 (full 357):
PSYoungGen total 201472K, used 200685K [0x573c0000, 0x63bc0000, 0x63bc0000)
eden space 198144K, 100% used [0x573c0000,0x63540000,0x63540000)
from space 3328K, 76% used [0x63540000,0x637bb528,0x63880000)
to space 3328K, 0% used [0x63880000,0x63880000,0x63bc0000)
ParOldGen total 843776K, used 422602K [0x23bc0000, 0x573c0000, 0x573c0000)
object space 843776K, 50% used [0x23bc0000,0x3d872b18,0x573c0000)
PSPermGen total 262144K, used 51848K [0x03bc0000, 0x13bc0000, 0x23bc0000)
object space 262144K, 19% used [0x03bc0000,0x06e62138,0x13bc0000)
Event: 572312.305 GC heap after
Heap after GC invocations=5046 (full 357):
PSYoungGen total 201472K, used 1103K [0x573c0000, 0x63bc0000, 0x63bc0000)
eden space 198144K, 0% used [0x573c0000,0x573c0000,0x63540000)
from space 3328K, 33% used [0x63880000,0x63993c90,0x63bc0000)
to space 3328K, 0% used [0x63540000,0x63540000,0x63880000)
ParOldGen total 843776K, used 423618K [0x23bc0000, 0x573c0000, 0x573c0000)
object space 843776K, 50% used [0x23bc0000,0x3d970b18,0x573c0000)
PSPermGen total 262144K, used 51848K [0x03bc0000, 0x13bc0000, 0x23bc0000)
object space 262144K, 19% used [0x03bc0000,0x06e62138,0x13bc0000)
}
Event: 572351.132 GC heap before
{Heap before GC invocations=5047 (full 357):
PSYoungGen total 201472K, used 199247K [0x573c0000, 0x63bc0000, 0x63bc0000)
eden space 198144K, 100% used [0x573c0000,0x63540000,0x63540000)
from space 3328K, 33% used [0x63880000,0x63993c90,0x63bc0000)
to space 3328K, 0% used [0x63540000,0x63540000,0x63880000)
ParOldGen total 843776K, used 423618K [0x23bc0000, 0x573c0000, 0x573c0000)
object space 843776K, 50% used [0x23bc0000,0x3d970b18,0x573c0000)
PSPermGen total 262144K, used 51848K [0x03bc0000, 0x13bc0000, 0x23bc0000)
object space 262144K, 19% used [0x03bc0000,0x06e62138,0x13bc0000)
Event: 572351.137 GC heap after
Heap after GC invocations=5047 (full 357):
PSYoungGen total 201472K, used 1615K [0x573c0000, 0x63bc0000, 0x63bc0000)
eden space 198144K, 0% used [0x573c0000,0x573c0000,0x63540000)
from space 3328K, 48% used [0x63540000,0x636d3ec8,0x63880000)
to space 3328K, 0% used [0x63880000,0x63880000,0x63bc0000)
ParOldGen total 843776K, used 423674K [0x23bc0000, 0x573c0000, 0x573c0000)
object space 843776K, 50% used [0x23bc0000,0x3d97eb18,0x573c0000)
PSPermGen total 262144K, used 51848K [0x03bc0000, 0x13bc0000, 0x23bc0000)
object space 262144K, 19% used [0x03bc0000,0x06e62138,0x13bc0000)
}
Event: 572398.649 GC heap before
{Heap before GC invocations=5048 (full 357):
PSYoungGen total 201472K, used 199759K [0x573c0000, 0x63bc0000, 0x63bc0000)
eden space 198144K, 100% used [0x573c0000,0x63540000,0x63540000)
from space 3328K, 48% used [0x63540000,0x636d3ec8,0x63880000)
to space 3328K, 0% used [0x63880000,0x63880000,0x63bc0000)
ParOldGen total 843776K, used 423674K [0x23bc0000, 0x573c0000, 0x573c0000)
object space 843776K, 50% used [0x23bc0000,0x3d97eb18,0x573c0000)
PSPermGen total 262144K, used 51848K [0x03bc0000, 0x13bc0000, 0x23bc0000)
object space 262144K, 19% used [0x03bc0000,0x06e62138,0x13bc0000)
Event: 572398.655 GC heap after
Heap after GC invocations=5048 (full 357):
PSYoungGen total 201472K, used 1998K [0x573c0000, 0x63bc0000, 0x63bc0000)
eden space 198144K, 0% used [0x573c0000,0x573c0000,0x63540000)
from space 3328K, 60% used [0x63880000,0x63a73830,0x63bc0000)
to space 3328K, 0% used [0x63540000,0x63540000,0x63880000)
ParOldGen total 843776K, used 423703K [0x23bc0000, 0x573c0000, 0x573c0000)
object space 843776K, 50% used [0x23bc0000,0x3d985cc0,0x573c0000)
PSPermGen total 262144K, used 51848K [0x03bc0000, 0x13bc0000, 0x23bc0000)
object space 262144K, 19% used [0x03bc0000,0x06e62138,0x13bc0000)
}
Event: 576881.689 GC heap before
{Heap before GC invocations=5049 (full 357):
PSYoungGen total 201472K, used 200142K [0x573c0000, 0x63bc0000, 0x63bc0000)
eden space 198144K, 100% used [0x573c0000,0x63540000,0x63540000)
from space 3328K, 60% used [0x63880000,0x63a73830,0x63bc0000)
to space 3328K, 0% used [0x63540000,0x63540000,0x63880000)
ParOldGen total 843776K, used 423703K [0x23bc0000, 0x573c0000, 0x573c0000)
object space 843776K, 50% used [0x23bc0000,0x3d985cc0,0x573c0000)
PSPermGen total 262144K, used 51850K [0x03bc0000, 0x13bc0000, 0x23bc0000)
object space 262144K, 19% used [0x03bc0000,0x06e62850,0x13bc0000)
Event: 576881.696 GC heap after
Heap after GC invocations=5049 (full 357):
PSYoungGen total 201472K, used 3155K [0x573c0000, 0x63bc0000, 0x63bc0000)
eden space 198144K, 0% used [0x573c0000,0x573c0000,0x63540000)
from space 3328K, 94% used [0x63540000,0x63854cb0,0x63880000)
to space 3328K, 0% used [0x63880000,0x63880000,0x63bc0000)
ParOldGen total 843776K, used 423703K [0x23bc0000, 0x573c0000, 0x573c0000)
object space 843776K, 50% used [0x23bc0000,0x3d985cc0,0x573c0000)
PSPermGen total 262144K, used 51850K [0x03bc0000, 0x13bc0000, 0x23bc0000)
object space 262144K, 19% used [0x03bc0000,0x06e62850,0x13bc0000)
}
Event: 580535.452 GC heap before
{Heap before GC invocations=5050 (full 357):
PSYoungGen total 201472K, used 201299K [0x573c0000, 0x63bc0000, 0x63bc0000)
eden space 198144K, 100% used [0x573c0000,0x63540000,0x63540000)
from space 3328K, 94% used [0x63540000,0x63854cb0,0x63880000)
to space 3328K, 0% used [0x63880000,0x63880000,0x63bc0000)
ParOldGen total 843776K, used 423703K [0x23bc0000, 0x573c0000, 0x573c0000)
object space 843776K, 50% used [0x23bc0000,0x3d985cc0,0x573c0000)
PSPermGen total 262144K, used 51856K [0x03bc0000, 0x13bc0000, 0x23bc0000)
object space 262144K, 19% used [0x03bc0000,0x06e64228,0x13bc0000)
Event: 580535.459 GC heap after
Heap after GC invocations=5050 (full 357):
PSYoungGen total 200960K, used 1858K [0x573c0000, 0x63bc0000, 0x63bc0000)
eden space 197632K, 0% used [0x573c0000,0x573c0000,0x634c0000)
from space 3328K, 55% used [0x63880000,0x63a50be0,0x63bc0000)
to space 3584K, 0% used [0x634c0000,0x634c0000,0x63840000)
ParOldGen total 843776K, used 423703K [0x23bc0000, 0x573c0000, 0x573c0000)
object space 843776K, 50% used [0x23bc0000,0x3d985cc0,0x573c0000)
PSPermGen total 262144K, used 51856K [0x03bc0000, 0x13bc0000, 0x23bc0000)
object space 262144K, 19% used [0x03bc0000,0x06e64228,0x13bc0000)
}

看了上面的內容,并沒有發現tomcat閃崩是由于老年代,持久代,新生代空間不足引起的。有好幾次因為eden區空間使用到100%引起的full gc,但是垃圾回收過后eden區的空間都恢復到正常的水平。

日志中還記錄了tomcat閃崩時heap堆的使用情況:

Heap
PSYoungGen total 200960K, used 95671K [0x573c0000, 0x63bc0000, 0x63bc0000)
eden space 197632K, 47% used [0x573c0000,0x5cf5d230,0x634c0000)
from space 3328K, 55% used [0x63880000,0x63a50be0,0x63bc0000)
to space 3584K, 0% used [0x634c0000,0x634c0000,0x63840000)
ParOldGen total 843776K, used 423703K [0x23bc0000, 0x573c0000, 0x573c0000)
object space 843776K, 50% used [0x23bc0000,0x3d985cc0,0x573c0000)
PSPermGen total 262144K, used 51856K [0x03bc0000, 0x13bc0000, 0x23bc0000)
object space 262144K, 19% used [0x03bc0000,0x06e64228,0x13bc0000)

一切都那么正常,同時又那么詭異。

翻看了之前發生日志,內容都是大同小異。

重新翻看了幾遍日志,這次把重點放在日志中建議的解決方案上:

# Reduce memory load on the system
# Increase physical memory or swap space
# Check if swap backing store is full
# Use 64 bit Java on a 64 bit OS
# Decrease Java heap size (-Xmx/-Xms)
# Decrease number of Java threads
# Decrease Java thread stack sizes (-Xss)

其中下面幾個解決方案不采用:

  • Reduce memory load on the system。 系統內存夠用,32G的內存,還剩20G沒用,無需減少內存。
  • Increase physical memory or swap space。 系統內存夠用,32G的內存,還剩20G沒用,無需增加物理內存。
  • Use 64 bit Java on a 64 bit OS。 32位操作系統,無法使用64位jdk。

只剩下下面的三個解決方案了:

  • Decrease Java heap size (-Xmx/-Xms)。 heap堆設置過大,就會影響剩余內存。
  • Decrease number of Java threads
  • Decrease Java thread stack sizes (-Xss)

而減少java線程的數量,需要修改代碼,這個也不實際。

最后只剩下

  • Decrease Java heap size (-Xmx/-Xms)
  • Decrease Java thread stack sizes (-Xss)

這兩個解決方案了,就從這里入手,曙光就在前方。

先看 Decrease Java thread stack sizes (-Xss) 解決方案

java線程運行也是需要內存空間的,-Xss參數指定每個線程堆棧的大小,為jvm啟動的每個線程分配的內存大小。在jdk1.4版本中是256K,JDK1.5及以上版本是1M。

tomcat jvm的參數設置如下:

JAVA_OPTS=%JAVA_OPTS% -server -Xms1024m -Xmx1024m -Xmn200M -XX:PermSize=256M -XX:MaxPermSize=512m -XX:SurvivorRatio=1 -Xss256k

已經通過-Xss設置每個java線程堆棧的大小為256K。

在java語言里, 當你創建一個線程的時候,虛擬機會在JVM內存創建一個Thread對象同時創建一個操作系統線程,而這個系統線程的內存用的不是JVMMemory,而是系統中剩下的內存(MaxProcessMemory - JVMMemory - ReservedOsMemory)。

當需要創建線程,而操作系統剩余內存不夠分配給一個java線程時,就會報Out of Memory Error的錯誤。

由于已經設置通過-Xss設置java線程棧的大小為256K,因此也決定不采用這個解決方案。

現在只剩 下Decrease Java heap size (-Xmx/-Xms) 這個解決方案了。通過減少堆的大小,而留出足夠的內存空間給java線程堆棧使用。

32位的window操作系統給每個進程分配的內存空間是2G,減去堆的最大容量和PermSize的最大容量,剩下的容量就留給java線程棧使用。

經過分析代碼和之前錯誤的日志,發現一般在350個線程這樣就出現Out of Memory Error的錯誤。
在出現錯誤時,heap空間才用了不到40%。因此決定將java heap的從1G減少到768M。

修改的jvm參數如下:

JAVA_OPTS=%JAVA_OPTS% -server -Xms768m -Xmx768m -Xmn200M -XX:PermSize=256M -XX:MaxPermSize=512m -XX:SurvivorRatio=1 -Xss256k

到目前為止,系統已經穩定運行1個月,各個參數指標都在正常范圍內。heap使用率最高才70%。

總結:

1、經過這次解決bug,加深了對java虛擬機的了解,特別是線程棧,內存堆,持久代,新生代等概念。

2、一定要仔細閱讀日志文件,一步一步排除掉潛在的解決方案。綜合系統的運行環境,找出合理的解決方案。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

標簽:濰坊 怒江 東營 淮北 西藏 攀枝花 西寧 香港

巨人網絡通訊聲明:本文標題《一次tomcat自動關閉的bug解決》,本文關鍵詞  一次,tomcat,自動,關閉,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《一次tomcat自動關閉的bug解決》相關的同類信息!
  • 本頁收集關于一次tomcat自動關閉的bug解決的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    av福利精品导航| 91亚洲精品一区二区乱码| 夜夜精品视频一区二区| 久久久不卡网国产精品一区| 欧美人伦禁忌dvd放荡欲情| 色综合咪咪久久| 99re这里都是精品| 99精品国产91久久久久久| 久久激情五月婷婷| 美女网站色91| 麻豆成人久久精品二区三区小说| 丝袜美腿亚洲综合| 婷婷六月综合网| 亚洲成人动漫精品| 亚洲国产成人av好男人在线观看| 亚洲色图制服丝袜| 日韩美女视频一区二区 | 欧美日韩高清在线| 色偷偷88欧美精品久久久| 91亚洲精华国产精华精华液| 丰满少妇久久久久久久| 婷婷六月综合亚洲| 一区二区三区四区激情| 亚洲午夜成aⅴ人片| 香蕉成人伊视频在线观看| 亚洲一区二区三区四区五区黄| 夜夜嗨av一区二区三区网页 | 久久91精品久久久久久秒播| 捆绑紧缚一区二区三区视频| 久久99精品国产麻豆婷婷洗澡| 免费av网站大全久久| 经典一区二区三区| 国产剧情一区在线| 成人午夜精品在线| av激情成人网| 欧洲精品中文字幕| 91蜜桃视频在线| 欧美综合色免费| 欧美放荡的少妇| 亚洲精品在线观看视频| 久久久久久久久久久久久久久99 | 福利电影一区二区| 色综合久久久网| 精品视频一区三区九区| 在线观看日韩高清av| 欧美日本在线视频| 久久久久久久久久久久久夜| 久久免费看少妇高潮| 国产精品久久久一本精品 | 欧美日韩精品一二三区| 欧美一区二区三区日韩| 久久嫩草精品久久久精品一| 亚洲欧洲日韩av| 无码av免费一区二区三区试看 | 成人avav在线| 欧美三级中文字| 精品毛片乱码1区2区3区| 国产免费观看久久| 亚洲午夜久久久久久久久电影院| 久久精品国产久精国产| 久久精品999| 波多野结衣亚洲| 欧美美女一区二区在线观看| 久久这里只有精品视频网| 国产精品久久久久久久久久免费看 | 制服丝袜日韩国产| 久久婷婷色综合| 一区二区三区欧美| 久久99久久99| 色综合久久久久综合99| 日韩欧美黄色影院| 亚洲老妇xxxxxx| 午夜精品福利久久久| 国产成人午夜精品影院观看视频| 色8久久人人97超碰香蕉987| 精品久久人人做人人爱| 一区二区三区中文在线| 国内成人免费视频| 欧美怡红院视频| 精品日韩99亚洲| 亚洲国产乱码最新视频| 国产成人免费在线观看| 欧美一卡在线观看| 久久久亚洲高清| 一区二区三区资源| 国产成人午夜视频| 日韩视频免费观看高清在线视频| 亚洲天堂精品在线观看| 国产精品一区不卡| 91精品一区二区三区久久久久久 | 亚洲国产另类精品专区| 播五月开心婷婷综合| 日韩你懂的电影在线观看| 国产精品福利av| 国产综合久久久久影院| 91精品国产综合久久久久久漫画| 中文字幕av一区二区三区| 九九精品一区二区| 欧美乱熟臀69xxxxxx| 亚洲乱码国产乱码精品精小说 | 欧美精品免费视频| 亚洲另类色综合网站| 高清av一区二区| 91麻豆精品国产| 亚洲国产欧美在线| 色综合久久久久久久久久久| 国产精品国产a| 成人免费不卡视频| 久久免费精品国产久精品久久久久| 日av在线不卡| 3d动漫精品啪啪一区二区竹菊| 亚洲视频免费在线观看| 成人午夜私人影院| 国产欧美1区2区3区| 国产精品一线二线三线精华| 欧美成人在线直播| 久久国产精品色| 欧美三片在线视频观看| 亚洲国产你懂的| 欧美三级午夜理伦三级中视频| 玉足女爽爽91| 色视频欧美一区二区三区| 亚洲视频在线一区观看| 97国产精品videossex| 国产欧美日韩精品一区| 高清国产一区二区三区| 亚洲国产精品高清| 成人国产精品免费观看视频| 国产精品乱人伦中文| 国产成人欧美日韩在线电影| 精品999在线播放| 国产精品12区| 国产精品国模大尺度视频| 成人av网址在线| 亚洲视频 欧洲视频| 色菇凉天天综合网| 青青草91视频| 中文一区二区完整视频在线观看| 99国产精品久久久久久久久久久| 亚洲chinese男男1069| 精品国产污污免费网站入口| 成人av在线播放网站| 午夜精品久久久| 中文在线一区二区| 欧美精品在线观看播放| 丁香网亚洲国际| 午夜视频在线观看一区二区| 久久久精品tv| 欧美人妇做爰xxxⅹ性高电影| 国产伦精品一区二区三区视频青涩 | 奇米色777欧美一区二区| 亚洲国产精品国自产拍av| 欧美日韩第一区日日骚| 国产99久久久精品| 五月天激情综合网| 国产精品国产三级国产aⅴ中文| 欧美精品色一区二区三区| 成a人片亚洲日本久久| 美女任你摸久久| 亚洲精品久久嫩草网站秘色| 精品成人免费观看| 91福利在线播放| 国产91丝袜在线观看| 日韩精品福利网| 亚洲另类色综合网站| 久久日一线二线三线suv| 欧美日韩中文字幕精品| 波多野结衣在线一区| 久久精品免费看| 午夜视频在线观看一区二区| 综合久久综合久久| 26uuu亚洲综合色欧美| 欧美精品777| 91丨九色丨黑人外教| 国产精品主播直播| 麻豆精品视频在线观看视频| 亚洲综合色在线| 成人欧美一区二区三区白人| 精品女同一区二区| 欧美偷拍一区二区| 色综合中文字幕国产| 韩国三级在线一区| 日本亚洲免费观看| 一区二区在线看| 国产精品视频在线看| 精品91自产拍在线观看一区| 91精品国产免费久久综合| 色88888久久久久久影院野外| 成人99免费视频| 国产凹凸在线观看一区二区| 黄色日韩网站视频| 精品一区免费av| 日本sm残虐另类| 日欧美一区二区| 亚洲国产精品欧美一二99| 一区二区三区av电影| 亚洲欧美日韩国产综合| 色香蕉久久蜜桃| 国产乱国产乱300精品| 欧美a级理论片|