1. 程式人生 > >開發過程中jvm環境設定與查詢

開發過程中jvm環境設定與查詢

在開發過程中,常常由於專案佔用的記憶體空間比較大,在專案啟動或執行的過程中常常會丟擲

eclipse JVM配置

java.lang.OutOfMemoryError

java.lang.OutOfMemoryError: PermGen space

等的由於JVM堆疊或永久區空間不足的錯誤,導致不能正常執行

在eclipse中可通過如下配置修改JVM的執行環境:

-Xmx1024m -Xms1024m -XX:NewRatio=4 -XX:MaxPermSize=1024m

可根據情況進行調整

在eclipse中點選執行按鈕下拉選單,選擇【Run Configurations】,選擇要執行的程式或tomcat,在【Arguments】欄下的【VM arguments】引數下追加以上的配置資訊就OK了。

eg:



下次再執行的時候就再也不怕JVM的資源問題了,但前提你得要有足夠的記憶體資源供分配額。

windows下jvm執行情況查詢

如要檢視當前JVM下執行的狀態,直接用JDK自帶的工具檢視就可以,在windows下找到JDK安裝目錄下的jvisualvm.exe,雙擊開啟就可以運行了。


linux下JVM允許情況查詢

在linux下查詢jvm執行狀態我一般這樣查詢:

[[email protected] ~]# jps
9862 jar
714 Bootstrap
1114 Jps
先通過jps查詢出當前執行的程序ID,再通過jstat 查詢出JVM相關的執行狀態
[
[email protected]
~]# jstat -gc 9862 1000 5 S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT 1728.0 1728.0 93.0 0.0 14272.0 6821.0 35312.0 34974.2 47808.0 47538.1 6288 14.705 6 0.613 15.318 1728.0 1728.0 93.0 0.0 14272.0 6821.0 35312.0 34974.2 47808.0 47538.1 6288 14.705 6 0.613 15.318 1728.0 1728.0 93.0 0.0 14272.0 6821.0 35312.0 34974.2 47808.0 47538.1 6288 14.705 6 0.613 15.318 1728.0 1728.0 93.0 0.0 14272.0 6821.0 35312.0 34974.2 47808.0 47538.1 6288 14.705 6 0.613 15.318 1728.0 1728.0 93.0 0.0 14272.0 6821.0 35312.0 34974.2 47808.0 47538.1 6288 14.705 6 0.613 15.318
術語解釋如下:
#S0C 生還者區0 容量(KB)
#S1C 生還者區1 容量(KB)
#S0U 生還者區0 使用量(KB)
#S1U 生還者區1 使用量(KB)
#EC 伊甸園區容量(KB)
#EU 伊甸園區使用量(KB) 
#OC 老年區容量(KB)
#OU 老年區使用量(KB)
#PC 永久區容量(KB) 
#PU 永久區使用量(KB)
#YGC 新生代GC次數
#YGCT 新生代GC時間
#FGC full GC 事件的次數
#FGCT full GC的時間 
#GCT 總GC時間

從上面的例子可以看出,OC OU  PC PU這個欄的資料的資料老年區和永久區很快就會滿了。

由於老年區存放的能被GC進行回收,故不對其進行優化配置,程式也不會出現記憶體溢位,所以對於這裡OU可以不用對其進行配置。

由於PU永久區存放的是目前記憶體中的物件資訊,如這個程式中一個List裡存了大量資料,那麼它就會存放在永久區中, 如果不對其進行優化,會導致程式出現outofmemoryError的錯誤異常。在這裡,我剛剛檢視的是tomcat的執行情況,那麼就很有可能會導致出現tomcat在執行過程中宕機的問題,故需要根據機器的物理資訊對其進行優化配置

linux下tomcat的JVM相關引數配置

tomcat對永久區的配置方法如下:

修改TOMCAT_HOME/bin/catalina.sh 
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: 如
JAVA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m" 

我這裡這樣設定的

# Bugzilla 37848: only output this if we have a TTY
if [ $have_tty -eq 1 ]; then
#這裡是我新增的配置資訊,-Xms 初始化堆大小 -Xmx最大堆大小   -XX:PermSize 初始化永久區大小  -XX:MaxPermSize:最大永久區大小
  JAVA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=256m"
  echo "Using CATALINA_BASE:   $CATALINA_BASE"
  echo "Using CATALINA_HOME:   $CATALINA_HOME"
  echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"
儲存,重啟tomcat再查詢下狀態資訊如下:
[[email protected] bin]# jps
9862 jar
1269 Bootstrap
1393 Jps
[[email protected] bin]# jstat -gc 1269 1000 3
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT   
8704.0 8704.0 5012.6  0.0   69952.0   6781.4   174784.0   60132.0   65536.0 41832.6     12    0.272   0      0.000    0.272
8704.0 8704.0 5012.6  0.0   69952.0   6781.5   174784.0   60132.0   65536.0 41832.6     12    0.272   0      0.000    0.272
8704.0 8704.0 5012.6  0.0   69952.0   6781.5   174784.0   60132.0   65536.0 41832.6     12    0.272   0      0.000    0.272
[[email protected] bin]# 
這裡的pc明顯增大了許多,說明配置生效了

JAR程式JVM相關引數配置

對於某些JAR包的程式,它由於可能直接通過java -jar命令來執行,也可以對其進行相關的JVM配置,如spring boot的jar應用

其方法是直接在java 命令後加下引數即可,如

java -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=256m -jar program1.jar

我在這裡這樣配置:

nohup java -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m -jar myProgram.jar &
採用nohup讓這個程式永久在機器上後臺執行

在網上查詢這些相關資料時,發現這篇博文很不錯,對jstat的使用記錄得很清楚:

相關推薦

開發過程jvm環境設定查詢

在開發過程中,常常由於專案佔用的記憶體空間比較大,在專案啟動或執行的過程中常常會丟擲 eclipse JVM配置 java.lang.OutOfMemoryError java.lang.OutOfMemoryError: PermGen space 等的由於JVM堆疊或永

java開發過程所有會出現的異常解決的辦法

算術異常類:ArithmeticExecption  空指標異常類:NullPointerException  型別強制轉換異常:ClassCastException  陣列負下標異常:NegativeArrayException  陣列下標越

專案開發過程什麼是開發環境、測試環境、生產環境、UAT環境、模擬環境

專案開發過程中什麼是開發環境、測試環境、生產環境、UAT環境、模擬環境? 最近在公司專案開發過程中總用到測試環境,生產環境和UAT環境等,然而我對環境什麼的並不是很理解它的意思,一直處於開發階段,出於好奇,本人蒐集了自己所瞭解的一些知識分享給各位,如果有不齊全的地方,請在評論下方留言! 一

Android Studio開發過程的小插曲(Wifi熱點開發遇到的問題解決)

今天我參照《Android程式設計經典教程》進行wifi熱點開發。身為菜雞的我依然遇到了一些問題。 上一張截圖吧,免得大家不知道我說的問題在哪裡。 第一個問題: mainactivity.java中,我寫在wifiAdmin中的部分內容到了這裡又不能被識別了。 如

開發過程遇到的一些問題解決方式

一:Linux系統配置環境變數 1.獲得root最高許可權: sudo su 輸入密碼 2.cd /etc 3.getit profile  進入配置檔案 : export JAVA_HOME=輸入java目錄地址 export JRE_HOME=輸入jre目錄地址

開發過程遇到的WebView UserAgent 設定問題

  在專案中需要設定WebView的UserAgent來上報本機資訊,包括app版本等,以控制WebView不同版本顯示的內容。但是有時候WebView介面會紊亂,原因是UserAgent沒設定成功。 跟了下程式碼,發現開始時相關程式碼如下: <span style=

zabbix   監控平臺搭建過程的報錯解決方法總結

監控 zabbix 運維自動化1.php option post_max_size 2.php option max_execution_time 3.php option max_input_time 4.php time zone 5.php bcm

使用phxpaxos開發過程遇到的坑

例如 exec 永遠 傳輸 snap 如果 poi 沒有 github 1. 開啟BatchPropose後,狀態機使用ExecuteForCheckpoint生成快照要註意: ExecuteForCheckpoint中的InstanceID不能立即持久化。 例如:

ReactJS 開發過程的一些使用心得

有著 dom操作 作者 -s arc 有用 第一個 sets tao ReactJS作為目前最火的構建用戶界面的前端框架,為什麽有那麽多的前端工程師去追逐它,不僅因為它簡單,而且它提供了一系列強大的API讓我們擺脫以前繁瑣的DOM操作,使我們的邏輯更加清晰,代碼更加簡單。

在混合app開發過程使用百度地圖api的出現坐標偏差的解決

百度 api call cordova overlay forum gpo ext ddr 在項目中使用ngCordova的$cordovaGeolocation模塊獲取當前位置經緯度,當展示在百度地圖中時發現有誤差(我的測試誤差為1.7公裏左右),查資料發現百度地圖經緯度

微信紅包店小程序開發過程遇到的問題 php獲取附近周邊商家 顯示最近商家

企業 使用 發出 微信紅包 status 不用 發放 經緯 appid 最近公司在做一個項目就是微信紅包店。仿照的是微信官方在做的那個紅包店的模式。客戶搶紅包,搶到以後到店消費,消費以後就可以拿到商家的紅包了。 項目中的兩個難點: 1通過小程序來發紅包 這個之前在

【MySQL】【復制】利用slave_exec_mode處理復制過程出現的10621032錯誤

cati 事務 thead 組成 .cn 推薦 ren 報錯 引入 背景: ? 今天張師兄在群裏問了主從之間出現1032錯誤後,使用pt-slave-restart跳過後又出現了1062錯誤,該如何快速處理。 問題解析: ? 1032錯誤:主庫傳遞過來的binlog

關於基於Linphone的視頻通話Android端開發過程遇到的問題

浪費 phone 模式 需要 class 通話 其他 了解 同時 關於基於Linphone的視頻通話Android端開發過程中遇到的問題     運用開源項目Linphone的SDK進行開發,由於是小組進行開發,我主要負責的是界面部分。   由於當時是初學Android開發

nodejs開發過程遇到的一些插件記錄

.com 實現 輸出 規範 blog com nod 記錄 pan 1、chalk   Github:https://github.com/chalk/chalk    終端樣式定制插件,可自定義輸出日誌的樣式。 1、semver   管網:https://semv

大數據開發過程常用的分析軟件

大數據開發 大數據分析 大數據 Hadoop 大數據開發過程中常用的分析軟件大數據研究的出現,為企業、研究機構、政府決策提供了新的行之有效思路和手段,想要做好大數據的管理和分析,一些大數據開發工具的使用是必不可少的,以下是大數據開發過程中常用的工具:1. Apache HiveHive是一個建

二.JSP開發過程遇到的問題及解決

java 告訴 概率 share 回車 命令 left wid 應用 轉載自:http://www.cnblogs.com/leftshine/p/5238001.html 一.開發環境問題 問題一:Failed to load the JNI shared library

微信小程序開發過程踩過的坑集合,沒有解決不了的錯誤,只有踩不完的坑

pac 清除 bind ren 透明 .json 配置 reac 之間 微信小程序開發過程中踩過的坑,包含很多小程序開發細節,有些可能你也踩過。。。1、height:auto; 失效,必須指定 image 的高度為具體數值,不然高度為0。2、真機和模擬器的問題總結 inp

mysql/mariadb學習過程出現的問題解決

AR 數據 files l數據庫 pre .com 單個 primary cti mysql> insert into student values(162111,‘周帥‘,‘男‘,21,‘CS‘); ERROR 1062 (23000): Duplicate en

vue 開發過程遇到的問題

ati details .com 題集 get 問題 sdn 系統 tails 1. gitlab團隊協作開發 2. element ui 問題集錦 3. 使用vue和ElementUI快速開發後臺管理系統vue 開發過程中遇到的問題

昊天善圈講述區塊鏈技術應用開發過程幾種常見的區塊鏈系統類型:

玩遊戲 通過 遊戲 返利 應用 自定義 理財 區塊鏈 區塊鏈寵物系統 1.區塊鏈挖礦系統:手手機挖礦遊戲,挖得多賺得多,玩法自定義2.區塊鏈積分商城:多種積分獲取方式,積分可用於商城交易3.區塊鏈貨幣系統:自行發行數字貨幣,多種獲取貨幣方式,數字貨幣交易商城,打造數字貨幣全