成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

記一次JVM調(diào)優(yōu)

sugarmo / 1702人閱讀

摘要:現(xiàn)象登入生產(chǎn)環(huán)境,使用命令因為這時候并沒有打的,所以只能觀察現(xiàn)象。其他的可以根據(jù)這個類推,是內(nèi)純的占用量。

前言

我們的游戲上線之初,經(jīng)常有玩家反饋卡,或者有網(wǎng)絡延遲等現(xiàn)象,造成用戶流失等現(xiàn)象,這時候我就想到是不是可能是之前的jvm配置有問題,或者存在內(nèi)存泄露等問題。

現(xiàn)象

登入生產(chǎn)環(huán)境,使用命令,因為這時候并沒有打gc的log,所以只能觀察現(xiàn)象。

jstat -gcutil 27084 250 20

查看gc狀態(tài)

說明:

S0 S1 E O P YGC YGCT FGC FGCT GCT
54.62 0.00 42.87 43.52 86.24 1792 5.093 33 7.670 12.763

S0:新生代的susvivor0區(qū),空間使用率為54..62%

S1:新生代的susvivor1區(qū),空間使用率為0.00%(因為還沒有執(zhí)行第二次minor收集)

E:eden區(qū),空間使用率42.87%

O:舊生代,空間使用率43.52%

P:持久帶,空間使用率86.24%

YGC:minor gc執(zhí)行次數(shù)1792次

YGCT:minor gc耗費的時間5.093毫秒

FGC:full gc執(zhí)行次數(shù)33

FGCT:full gc耗費的時間7.670毫秒

GCT:gc耗費的總時間12.763毫秒

發(fā)現(xiàn)其實主要是full gc頻率過高,為什么會導致這個原因呢,我首先想到的是是不是老生代分配的過低,就著手分配老生代的比例

然而并沒有解決這個問題,發(fā)現(xiàn)YGC持續(xù)升高,而FGC也會逐漸上來,暫時解決了問題的表象而已。

解決問題 首先看一下該jvm使用內(nèi)存的情況

使用命令jstat -gccapacity:可以顯示,VM內(nèi)存中三代(young,old,perm)對象的使用和占用大小,如:PGCMN顯示的是最小perm的內(nèi)存使用量,PGCMX顯示的是perm的內(nèi)存最大使用量,PGC是當前新生成的perm內(nèi)存占用量,PC是但前perm內(nèi)存占用量。其他的可以根據(jù)這個類推, OC是old內(nèi)純的占用量。

發(fā)現(xiàn)問題

看了一下jvm內(nèi)存分配情況,發(fā)現(xiàn)一共新生代只分配了50M左右,發(fā)現(xiàn)原來之前使用的啟動腳本并沒有設置jvm啟動參數(shù)

解決問題

先把Jvm參數(shù)調(diào)整,gc log文件夾設置

JAVA_OPTS="-Xms2048m -Xmx2048m -XX:PermSize=64m -XX:MaxPermSize=256m
-verbose:gc -Xloggc:/home/admin/logs/gc.log"

生產(chǎn)環(huán)境Java應用的jvm參數(shù)Xms與Xmx保持一致,避免因所使用的Java堆內(nèi)存不夠導致頻繁full gc以及full gc中因動態(tài)調(diào)節(jié)Java堆大小而耗費延長其周期。
查看下圖,F(xiàn)GC已經(jīng)明顯下降到正常水平

總結

學好JVM可以從JVM參數(shù)開始:

參數(shù)名稱 含義 默認值
-Xms 初始堆大小 物理內(nèi)存的1/64(<1GB) 默認(MinHeapFreeRatio參數(shù)可以調(diào)整)空余堆內(nèi)存小于40%時,JVM就會增大堆直到-Xmx的最大限制.
-Xmx 最大堆大小 物理內(nèi)存的1/4(<1GB) 默認(MaxHeapFreeRatio參數(shù)可以調(diào)整)空余堆內(nèi)存大于70%時,JVM會減少堆直到 -Xms的最小限制
-Xmn 年輕代大小(1.4or lator)注意:此處的大小是(eden+ 2 survivor space).與jmap -heap中顯示的New gen是不同的。整個堆大小=年輕代大小 + 年老代大小 + 持久代大小.增大年輕代后,將會減小年老代大小.此值對系統(tǒng)性能影響較大,Sun官方推薦配置為整個堆的3/8
-XX:NewSize 設置年輕代大小(for 1.3/1.4)
-XX:MaxNewSize 年輕代最大值(for 1.3/1.4)
-XX:PermSize 設置持久代(perm gen)初始值 物理內(nèi)存的1/64
-XX:MaxPermSize 設置持久代最大值 物理內(nèi)存的1/4
-Xss 每個線程的堆棧大小,JDK5.0以后每個線程堆棧大小為1M,以前每個線程堆棧大小為256K.更具應用的線程所需內(nèi)存大小進行 調(diào)整.在相同物理內(nèi)存下,減小這個值能生成更多的線程.但是操作系統(tǒng)對一個進程內(nèi)的線程數(shù)還是有限制的,不能無限生成,經(jīng)驗值在3000~5000左右,一般小的應用, 如果棧不是很深, 應該是128k夠用的 大的應用建議使用256k。這個選項對性能影響比較大,需要嚴格的測試。(校長)和threadstacksize選項解釋很類似,官方文檔似乎沒有解釋,在論壇中有這樣一句話:"”-Xss is translated in a VM flag named ThreadStackSize”一般設置這個值就可以了。
-XX:ThreadStackSize Thread Stack Size (0 means use default stack size) [Sparc: 512; Solaris x86: 320 (was 256 prior in 5.0 and earlier); Sparc 64 bit: 1024; Linux amd64: 1024 (was 0 in 5.0 and earlier); all others 0.]
-XX:NewRatio 年輕代(包括Eden和兩個Survivor區(qū))與年老代的比值(除去持久代) -XX:NewRatio=4表示年輕代與年老代所占比值為1:4,年輕代占整個堆棧的1/5Xms=Xmx并且設置了Xmn的情況下,該參數(shù)不需要進行設置。
-XX:SurvivorRatio Eden區(qū)與Survivor區(qū)的大小比值 設置為8,則兩個Survivor區(qū)與一個Eden區(qū)的比值為2:8,一個Survivor區(qū)占整個年輕代的1/10
-XX:LargePageSizeInBytes 內(nèi)存頁的大小不可設置過大, 會影響Perm的大小 =128m
-XX:+UseFastAccessorMethods 原始類型的快速優(yōu)化
-XX:+DisableExplicitGC 關閉System.gc() 這個參數(shù)需要嚴格的測試
-XX:MaxTenuringThreshold 垃圾最大年齡 如果設置為0的話,則年輕代對象不經(jīng)過Survivor區(qū),直接進入年老代. 對于年老代比較多的應用,可以提高效率.如果將此值設置為一個較大值,則年輕代對象會在Survivor區(qū)進行多次復制,這樣可以增加對象再年輕代的存活 時間,增加在年輕代即被回收的概率,該參數(shù)只有在串行GC時才有效.
-XX:+AggressiveOpts 加快編譯
-XX:+UseBiasedLocking 鎖機制的性能改善
-Xnoclassgc 禁用垃圾回收
-XX:SoftRefLRUPolicyMSPerMB 每兆堆空閑空間中SoftReference的存活時間 1s softly reachable objects will remain alive for some amount of time after the last time they were referenced. The default value is one second of lifetime per free megabyte in the heap
-XX:PretenureSizeThreshold 對象超過多大是直接在舊生代分配 0 單位字節(jié) 新生代采用Parallel Scavenge GC時無效,另一種直接在舊生代分配的情況是大的數(shù)組對象,且數(shù)組中無外部引用對象.
-XX:TLABWasteTargetPercent TLAB占eden區(qū)的百分比 1%
-XX:+CollectGen0First FullGC時是否先YGC false

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/66303.html

相關文章

  • 一次PHP并發(fā)性能調(diào)優(yōu)實戰(zhàn) -- 性能提升104%

    摘要:這是多處理器系統(tǒng)中,調(diào)度器用來分散任務到不同的機制,通常也被稱為處理器間中斷,。文章編寫計劃 待完成: 詳細介紹用到的各個工具 作者: 萬千鈞(祝星) 適合閱讀人群 文中的調(diào)優(yōu)思路無論是php, java, 還是其他任何語言都是用. 如果你有php使用經(jīng)驗, 那肯定就更好了 業(yè)務背景 框架及相應環(huán)境 laravel5.7, mysql5.7, redis5, nginx1.15 cento...

    番茄西紅柿 評論0 收藏0
  • 一次PHP并發(fā)性能調(diào)優(yōu)實戰(zhàn) -- 性能提升104%

    摘要:這是多處理器系統(tǒng)中,調(diào)度器用來分散任務到不同的機制,通常也被稱為處理器間中斷,。文章編寫計劃 待完成: 詳細介紹用到的各個工具 作者: 萬千鈞(祝星) 適合閱讀人群 文中的調(diào)優(yōu)思路無論是php, java, 還是其他任何語言都是用. 如果你有php使用經(jīng)驗, 那肯定就更好了 業(yè)務背景 框架及相應環(huán)境 laravel5.7, mysql5.7, redis5, nginx1.15 cento...

    xeblog 評論0 收藏0
  • 一次jvm 內(nèi)存溢出

    摘要:什么是內(nèi)存溢出內(nèi)存溢出是指,程序創(chuàng)建對象需要內(nèi)存,但是卻沒有內(nèi)存可用了,內(nèi)存就溢出了。使用命令查看個數(shù)輸入后,按診斷是文件在服務端沒讀取到,還是內(nèi)存溢出。無耐,阿里云學生機配置不好,只能稍微修改一點,再將文件切割為小文件上傳了參數(shù)請參考 1、什么是內(nèi)存泄漏內(nèi)存泄漏是指,有未被釋放的java對象,一直停留在內(nèi)存中。GCRoot 無法追蹤到此對象,導致此對象無法被回收。 2、什么是內(nèi)存溢出...

    tainzhi 評論0 收藏0
  • 一次 Laravel 應用性能調(diào)優(yōu)經(jīng)歷

    摘要:為了一探究竟,于是開啟了這次應用性能調(diào)優(yōu)之旅。使用即時編譯器和都能輕輕松松的讓你的應用程序在不用做任何修改的情況下,直接提高或者更高的性能。 這是一份事后的總結。在經(jīng)歷了調(diào)優(yōu)過程踩的很多坑之后,我們最終完善并實施了初步的性能測試方案,通過真實的測試數(shù)據(jù)歸納出了 Laravel 開發(fā)過程中的一些實踐技巧。 0x00 源起 最近有同事反饋 Laravel 寫的應用程序響應有點慢、20幾個并...

    warkiz 評論0 收藏0
  • 一次OkHttpClient導致線程過多的排查

    摘要:首先先解讀下這個報警內(nèi)容,原因活躍線程數(shù)過多,是監(jiān)聽的端口號用來獲取虛擬機各項信息,代表著此時的線程數(shù),是設置的報警閾值。 前言 前天,一位21世紀的好好青年正在工位上默念社會主義大法好的時候,釘釘上又報警了(公司項目接入了open-faclon監(jiān)控,指標不正常會報警給釘釘?shù)臋C器人),無奈默默流淚揮手告別社會主義大法開始定位線上問題。 報警內(nèi)容 首先我們先來看下報警信息,為防止泄露公...

    tianyu 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<