内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

如何解決tomcat自動(dòng)關(guān)閉的bug

這篇文章主要介紹了如何解決tomcat自動(dòng)關(guān)閉的bug,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

專(zhuān)注于為中小企業(yè)提供網(wǎng)站制作、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)陵水黎族免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了近1000家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

前言

最近一個(gè)運(yùn)行了4年的javaee web項(xiàng)目,經(jīng)常接到客戶(hù)反饋系統(tǒng)無(wú)法打開(kāi)。登錄服務(wù)器查看服務(wù),發(fā)現(xiàn)是tomcat自動(dòng)關(guān)閉了。基本是3到4天發(fā)生一次。

運(yùn)維人員開(kāi)始以為是其他服務(wù)殺死了tomcat服務(wù),沒(méi)放在心上,解決方法就是直接重啟tomcat。

最終捅了簍子,運(yùn)維人員被客戶(hù)投訴,扣了一個(gè)月的績(jī)效。

解決這個(gè)bug兜兜轉(zhuǎn)轉(zhuǎn)來(lái)到了我這里。既然接到任務(wù),那就開(kāi)干,沒(méi)有解決不了的bug。

系統(tǒng)的運(yùn)行環(huán)境如下:

  • tomcat6.0

  • 32位jdk7.0

  • window server2003 32位,32G內(nèi)存。

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

# 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.

大概意思就是內(nèi)存不夠了,無(wú)法分配32756字節(jié)的空間。同時(shí)給出幾個(gè)解決方法:

1、減少系統(tǒng)內(nèi)存負(fù)載;

2、增加物理內(nèi)存或者交換空間;

3、在64位操作系統(tǒng)上使用64位jdk;

4、減少java heap大?。?/p>

5、減少java線(xiàn)程數(shù)量;

6、減少java線(xiàn)程堆棧大小。

通過(guò)上面的內(nèi)容可以得出,jvm無(wú)法分配32756 bytes的內(nèi)存空間。

從接到任務(wù)開(kāi)始,我一直以為是jvm配置出錯(cuò),導(dǎo)致內(nèi)存不夠用,只需調(diào)整下新生代、老年代的配置即可。

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

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)
}

看了上面的內(nèi)容,并沒(méi)有發(fā)現(xiàn)tomcat閃崩是由于老年代,持久代,新生代空間不足引起的。有好幾次因?yàn)閑den區(qū)空間使用到100%引起的full gc,但是垃圾回收過(guò)后eden區(qū)的空間都恢復(fù)到正常的水平。

日志中還記錄了tomcat閃崩時(shí)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)

一切都那么正常,同時(shí)又那么詭異。

翻看了之前發(fā)生日志,內(nèi)容都是大同小異。

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

# 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)

其中下面幾個(gè)解決方案不采用:

  • Reduce memory load on the system。 系統(tǒng)內(nèi)存夠用,32G的內(nèi)存,還剩20G沒(méi)用,無(wú)需減少內(nèi)存。

  • Increase physical memory or swap space。 系統(tǒng)內(nèi)存夠用,32G的內(nèi)存,還剩20G沒(méi)用,無(wú)需增加物理內(nèi)存。

  • Use 64 bit Java on a 64 bit OS。 32位操作系統(tǒng),無(wú)法使用64位jdk。

只剩下下面的三個(gè)解決方案了:

  • Decrease Java heap size (-Xmx/-Xms)。 heap堆設(shè)置過(guò)大,就會(huì)影響剩余內(nèi)存。

  • Decrease number of Java threads

  • Decrease Java thread stack sizes (-Xss)

而減少java線(xiàn)程的數(shù)量,需要修改代碼,這個(gè)也不實(shí)際。

最后只剩下

  • Decrease Java heap size (-Xmx/-Xms)

  • Decrease Java thread stack sizes (-Xss)

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

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

java線(xiàn)程運(yùn)行也是需要內(nèi)存空間的,-Xss參數(shù)指定每個(gè)線(xiàn)程堆棧的大小,為jvm啟動(dòng)的每個(gè)線(xiàn)程分配的內(nèi)存大小。在jdk1.4版本中是256K,JDK1.5及以上版本是1M。

tomcat jvm的參數(shù)設(shè)置如下:

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

已經(jīng)通過(guò)-Xss設(shè)置每個(gè)java線(xiàn)程堆棧的大小為256K。

在java語(yǔ)言里, 當(dāng)你創(chuàng)建一個(gè)線(xiàn)程的時(shí)候,虛擬機(jī)會(huì)在JVM內(nèi)存創(chuàng)建一個(gè)Thread對(duì)象同時(shí)創(chuàng)建一個(gè)操作系統(tǒng)線(xiàn)程,而這個(gè)系統(tǒng)線(xiàn)程的內(nèi)存用的不是JVMMemory,而是系統(tǒng)中剩下的內(nèi)存(MaxProcessMemory - JVMMemory - ReservedOsMemory)。

當(dāng)需要?jiǎng)?chuàng)建線(xiàn)程,而操作系統(tǒng)剩余內(nèi)存不夠分配給一個(gè)java線(xiàn)程時(shí),就會(huì)報(bào)Out of Memory Error的錯(cuò)誤。

由于已經(jīng)設(shè)置通過(guò)-Xss設(shè)置java線(xiàn)程棧的大小為256K,因此也決定不采用這個(gè)解決方案。

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

32位的window操作系統(tǒng)給每個(gè)進(jìn)程分配的內(nèi)存空間是2G,減去堆的最大容量和PermSize的最大容量,剩下的容量就留給java線(xiàn)程棧使用。

經(jīng)過(guò)分析代碼和之前錯(cuò)誤的日志,發(fā)現(xiàn)一般在350個(gè)線(xiàn)程這樣就出現(xiàn)Out of Memory Error的錯(cuò)誤。
在出現(xiàn)錯(cuò)誤時(shí),heap空間才用了不到40%。因此決定將java heap的從1G減少到768M。

修改的jvm參數(shù)如下:

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

到目前為止,系統(tǒng)已經(jīng)穩(wěn)定運(yùn)行1個(gè)月,各個(gè)參數(shù)指標(biāo)都在正常范圍內(nèi)。heap使用率最高才70%。

總結(jié):

1、經(jīng)過(guò)這次解決bug,加深了對(duì)java虛擬機(jī)的了解,特別是線(xiàn)程棧,內(nèi)存堆,持久代,新生代等概念。

2、一定要仔細(xì)閱讀日志文件,一步一步排除掉潛在的解決方案。綜合系統(tǒng)的運(yùn)行環(huán)境,找出合理的解決方案。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何解決tomcat自動(dòng)關(guān)閉的bug”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

網(wǎng)站題目:如何解決tomcat自動(dòng)關(guān)閉的bug
標(biāo)題URL:http://m.rwnh.cn/article2/jipeic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)品牌網(wǎng)站建設(shè)、品牌網(wǎng)站制作、響應(yīng)式網(wǎng)站、搜索引擎優(yōu)化、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
仪陇县| 吕梁市| 临西县| 曲周县| 深圳市| 霸州市| 克山县| 游戏| 吐鲁番市| 柏乡县| 辉南县| 巴中市| 景东| 蒙阴县| 土默特左旗| 江门市| 金坛市| 汤原县| 托克托县| 桐城市| 海林市| 新平| 得荣县| 天长市| 吕梁市| 岚皋县| 枣庄市| 嘉义县| 孟津县| 辉县市| 通山县| 沛县| 乌兰察布市| 麻阳| 巴塘县| 安岳县| 林甸县| 吴江市| 仁怀市| 上思县| 固镇县|