初始化虛擬機器錯誤 - Error occurred during initialization of VM
文章目錄
1 環境配置資訊
1.1 伺服器配置資訊
伺服器是物理機, 配置資訊如下:
CPU型號 | CPU個數 | CPU核數 | CPU執行緒數 | 記憶體 |
---|---|---|---|---|
Intel® Xeon® CPU E5-2630 v4 @ 2.20GHz | 2個 | 2 * 10 = 20個核 | 2 * 20 = 40個執行緒 | 126G |
1.2 Tomcat啟動引數
檢視$TOMCAT_HOME/bin/catalina.sh
檔案, 其中JVM引數配置資訊如下:
JAVA_OPTS="-server -Xms90g -Xmx90g -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC"
2 問題描述
在伺服器(CentOS-6.5)中部署專案上線前的模擬測試環境, 啟動Tomcat時, 丟擲如下錯誤:
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
即:
初始化VM時出錯, 無法為heap(堆)物件保留足夠的空間.
錯誤: 無法建立Java虛擬機器.
錯誤: 發生了致命異常. 程式將會退出.
3 問題解決
根據問題描述可知, Linux系統不允許初始化JVM時就申請這麼大的記憶體.
-
JVM可用記憶體測試方法:
# 配置好JDK的環境變數後, 在終端鍵入如下命令: java -Xmx32g -version # 如果能夠正常顯示JDK的版本資訊, 說明可以申請到指定大小的記憶體. # 若報錯, 說明申請的記憶體大小超出限制, 不被作業系統所允許.
-
繼續檢視系統資源限制情況:
# 在終端鍵入如下命令: ulimit -a # 發現記憶體的使用並未受限: max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited
經過排查, 原來同事在測試Greenplum DB時, 修改了/etc/sysctl.conf
檔案中的系統核心引數.
# 將如下引數的值設定為1或0
vm.overcommit_memory=2
# 儲存退出後, 使得更改生效:
sysctl -p
此時再次啟動Tomcat, 發現啟動成功.
4 關於vm.overcommit_memory引數的說明
vm.overcommit_memory表示系統核心在分配記憶體時做檢查的方式.
此引數有 [0、1、2] 3個值可選, 處理方式定義在核心原始碼mm/mmap.c
的_vm_enough_memory
函式中.
4.1 vm.overcommit_memory=0
預設設定. 巨集為OVERCOMMIT_GUESS.
核心計算: NR_FILE_PAGES總量 + SWAP總量 + slab中可以釋放的記憶體總量
, 如果申請空間超過此數值, 則將此數值與空閒記憶體總量減掉 totalreserve_pages() 的總量相加. 如果申請空間依然超過此數值, 則分配失敗.
該設定可能造成記憶體超載, 但也可以提升大量使用記憶體的任務的效能.
4.2 vm.overcommit_memory=1
巨集為OVERCOMMIT_ALWAYS.
函式直接 return 0, 分配成功.
4.3 vm.overcommit_memory=2
巨集為OVERCOMMIT_NEVER.
核心計算: 總實體記憶體 * vm.overcommit_ratio / 100 +SWAP總量
, 如果申請空間超過此數值, 則分配失敗. vm.overcommit_ratio 預設值為50.
該設定可以有效減少記憶體過度使用的風險.
4.4 檢視系統的可用記憶體
檢視命令如下:
[[email protected] ~]# grep -i commit /proc/meminfo
CommitLimit: 66020980 kB
Committed_AS: 100135888 kB
- CommitLimit: 當前系統還可以申請的總記憶體;
- Committed_AS: 當前系統中所有應用申請了的總記憶體 —— 只是申請, 並未完全分配.
參考
https://blog.csdn.net/qq_16097611/article/details/52816908
https://www.cnblogs.com/xianbei/archive/2012/11/23/2783800.html
版權宣告
作者: ma_shoufeng(馬瘦風)
出處: CSDN 馬瘦風的部落格
您的支援是對博主的極大鼓勵, 感謝您的閱讀.
本文版權歸博主所有, 歡迎轉載, 但未經博主同意必須保留此段宣告, 且在文章頁面明顯位置給出原文連結, 否則博主保留追究相關人員法律責任的權利.