Java HotSpot(TM) 64-Bit Server VM warning: Insufficient space for shared memory file:
/tmp/hsperfdata_ol-mobile/17506
Try using the -Djava.io.tmpdir= option to select an alternate temp location. html
這種異常可引發客戶端鏈接異常,由於會形成服務不可用,注意這個異常,有多是由於服務器端的日誌文件佔用的內存太多了引發JVM沒有空間在/tmp下面創建JVM的pid文件 java
能夠經過寫定時任務按期刪除部分log:linux 定時任務參考 http://blog.chinaunix.net/uid-7552018-id-182133.html linux
搜索得知這是JVM拋出的錯誤
大意是沒有空間在/tmp下面創建JVM的pid文件
解決方式一是取消該文件的自動建立(使用的命令參數參考這個連接http://stackoverflow.com/questions/76327/how-can-i-prevent-java-from-creating-hsperfdata-files (Try JVM option -XX:-UsePerfData)),或者修改一個建立目錄,可是磁盤空間依然是滿的,沒有處理,那麼就用第二種方法,找出致滿的磁盤。
df發現某一個滿的分區
而後du -sh /xxx 計算這個目錄的總佔用量 而後層層往下 找出佔用較大空間的文件 通常是/var目錄佔用較多空間,由於下面有日誌 /var/log ,若是開機時間太久,kernel日誌極可能佔很大的空間致使此分區滿。 服務器
錯誤解決後,搜索學習這個 /tmp/hsperfdata_$user/$number的做用:
That directory is part of a Java performance counter. jvm
這個文件存的應該是JVM進程當前的一些性能參數(或者說運行信息) 工具
jvmstat會生成一個目錄文件叫hsperfdata_username,那這個目錄文件在哪裏呢,默認的是生成在 java.io.tmpdir目錄下, java.io.tmpdir在linux下默認是/tmp下,故默認開啓了jvm monitor的功能之後就會在/tmp目錄下生成一個目錄叫 hsperfdata_username ,而後這個目錄中會有一個pid文件,能夠利用strings查看裏面的文件內容,通常就是jvm的進程信息而已。 性能
而jps、jconsole、jvisualvm等工具的數據來源就是這個文件(/tmp/hsperfdata_userName/pid)。因此當該文件不存在或是沒法讀取時就會出現jps沒法查看該進程號,jconsole沒法監控等問題 學習
/tmp/hsperfdata_userName/pid文件會在對應java進程退出後被清除。若是java進程非正常退出(如kill -9),那麼pid文件會被保留,直到執行一次java命令或是加載了jvm程序的命令(如jps、javac、jstat),會將全部無用的pid文件都清除掉 ui