1. 背景
項目部署在服務(wù)器上,在夜深人靜的時候閃退了2次,第二天早上來了之后,發(fā)現(xiàn)tomcat服務(wù)器又被關(guān)閉了,因為服務(wù)器之前總有人惡搞(行為類似:數(shù)據(jù)庫的配置信息max_packet被修改,在tomcat下跑了別人的項目),就一直認為是有人在惡搞,試著保護自己的服務(wù)器,用電腦管家殺了毒。以為沒事了,但是在下一天的早上同樣的事情又發(fā)生了,由于甲方的壓力,自己硬著頭皮去找出線索。
2. 行動
-
看了tomcat的日志文件 tomcat:localhost
開始設(shè)想,是不是因為“sessionCreated” ,在網(wǎng)上搜索了sessionCreated,有人說是正常信息的打印,沒有往下繼續(xù)探索為什么會打印這種信息。
-
繼續(xù)tomcat:access_log
是不是因為這個呢,通過搜索發(fā)現(xiàn)也不是,網(wǎng)上說tomcat-user.xml把注釋刪掉就不會有這些東西了,我仍然沒有驗證。
- 同樣在,access_log中發(fā)現(xiàn)這樣的錯誤信息
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986”
感覺就是地址中帶上了非法的字符,不應(yīng)該直接把tomcat搞崩潰啊,tomcat的日志文件都看了,依然什么線索沒有發(fā)現(xiàn),快要走不下去......
- 直接百度吧
直接在百度上搜索了“tcomat異常退出情況”
看到了一個大牛的blog tomcat異常退出情況 果然就是不一樣,給我提供了幾種設(shè)想,會不會是應(yīng)為內(nèi)存溢出什么的呢,然后在tomcat的bin目錄下發(fā)發(fā)現(xiàn)了幾個好奇的文件這幾個文件這么面生,怎么從來沒有見過,打開一個,看不懂啊,那又能怎樣,繼續(xù)百度(隨意從文件中挑出一句話,沒錯就是第一句)tomcat異常退出日志
A fatal error has been detected by the Java Runtime Environment:
然后發(fā)現(xiàn)又好多大牛的關(guān)于此類問題的blog,我著重看的是這個大牛的 A fatal error has been detected by the Java Runtime Environment: 果然是站在巨人的肩膀上,分析的特別具體,但是由于自己太菜,有好多關(guān)于jvm的知識沒有接觸,反正最終的出的結(jié)論就是內(nèi)存不夠用
Stack: [0x0000000032d70000,0x0000000032e70000], sp=0x0000000032e6ee50, free space=1019k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [tcnative-1.dll+0x14ac2]
C [tcnative-1.dll+0x11e7]
C 0x0000000004b04d0a
發(fā)現(xiàn)free space 僅有1M,感覺顯示內(nèi)存溢出的原因,既然有了這個原因,就下手吧
- 修改tomcat的jvm的參數(shù)
依然是百度的Tomcat調(diào)優(yōu) tomcat調(diào)優(yōu)
另一個:tomcat調(diào)優(yōu)
故事還未完,項目需要一段時間的測試,來驗證問題是否已經(jīng)解決。
經(jīng)過1個星期的測試,項目沒有閃退過,應(yīng)該就是這個問題了。
3. 總結(jié)
- 平時要加強對底層知識的學(xué)習(xí)力度
- 要善于查看日志,能夠根據(jù)日志分析項目的運行狀態(tài)
- 保持一顆好奇心,對未知的事物不要服從


