日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

docker java 内存溢出_java内存溢出

發布時間:2024/3/24 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker java 内存溢出_java内存溢出 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

與此問題類似jmeter Error occurred during initialization of VM Could not reserve enough space_蕭木易的博客-CSDN博客

前言

微服務和docker的結合應該是現在服務端的主流技術,隨著springboot的出現,有很多公司已經把微服務遷移到了docker容器中,我們也不甘寂寞,也嘗試了一把新技術,把以前的整體服務進行拆分以后,也全部上到了docker容器中。

問題

壓力測試穩定性測試時發現TPS突然降了下來,進入微服務查看日志發現報內存溢出,如下圖。

后來由于java默認使用的內存是docker實體機器1/4的內存,導致部署了很多應用以后,經常出現內存不足的情況,然后公司要求應用在啟動的時候通過jvm的啟動參數來限制java使用的內存來緩解內存消耗過快的問題。

再后來,我們的docker平臺進行了升級, 有了可以讓應用限制cpu個數和mem大小的參數設置,后面應用方把app的?-Xmx和docker的內存大小設置成同樣大小, 比如2g。后面發現跑了一段時間以后,應用經常出現oom的情況,而被殺掉。

因為java使用的內存不僅僅是?-Xmx設置的大小,?-Xmx設置的大小只是java進程堆的最大占用內存,

原因

為什么會出現上面這個問題呢?通過監控系統可以知道,docker獲得的mem_usage的大小是從外部得到的java進程的內存大小,不僅僅是?-Xmx設置的大小,如果?-Xmx和docker分配的內存一致的話,由于java應用其他的地方還要占用不少的內存,導致還沒有到達?-Xmx的時候就沒有可以用的內存了,所以被docker容器給干掉了,從而出現了oom的情況。

那么java程序啟動的時候需要哪些方面的內存呢?

  • java程序的堆內存,最大就是?-Xmx設置的這個值
  • Garbage collection在垃圾回收的時候使用的內存
  • JIT optimization使用的內存
  • java程序的Off-heap所使用的內存
  • java程序的Metaspace所使用的內存
  • JNI Code所占用的內存
  • jvm啟動的時候所占用的內存。
  • 如何大體估算java進程使用的內存呢?

    Max memory = [-Xmx] + [-XX:MaxPermSize] + number_of_threads * [-Xss]

    上面的公式大體得到了內存的占用,但是不是全部占用,網上有一些人做了一些試驗,有兩篇比較好的介紹文章:
    https://plumbr.eu/blog/memory-leaks/why-does-my-java-process-consume-more-memory-than-xmx

    http://trustmeiamadeveloper.com/2016/03/18/where-is-my-memory-java/

    所以猜測在設置jvm啟動參數的時候?-Xmx的這個值一般要小于docker限制內存數,個人覺得?-Xmx:docker的比例為?4/5 - 3/4,

    目前正在試驗和觀察,這里僅僅保存一下記錄,以免忘記。

    解決方法:查看docker java配置,把這個值改大

    ?

    總結

    以上是生活随笔為你收集整理的docker java 内存溢出_java内存溢出的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。