亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

docker 查看jvm內(nèi)存占用方式

 更新時(shí)間:2021年03月19日 09:59:24   作者:yzh_1346983557  
這篇文章主要介紹了docker 查看jvm內(nèi)存占用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

一、進(jìn)入docker容器的宿主機(jī),查看運(yùn)行指定鏡像的容器id(結(jié)果的第一列):

docker ps | grep myImageName(或docker ps | grep java)

二、進(jìn)入容器內(nèi)部:

docker exec -it containerId sh

三、直接輸入top命令:

top

可看到基本的容器占用的信息:pid、vsz、cpu、command等。(ctrl+c 或 q,退出top)

四、查看更具體的jvm內(nèi)存占用:

top -m 

其中,vsz:Virtual Memory Size,虛擬內(nèi)存大小,表明了該進(jìn)程可以訪問(wèn)的所有內(nèi)存,包括被交換的內(nèi)存和共享庫(kù)內(nèi)存。

rss: Resident Set Size,常駐內(nèi)存集合大小,表示進(jìn)程在RAM中占用了多少內(nèi)存,并不包含在SWAP中占用的虛擬內(nèi)存。即使是在內(nèi)存中的使用了共享庫(kù)的內(nèi)存大小也一并計(jì)算在內(nèi),包含了完整的在stack和heap中的內(nèi)存。

SHR:shared memory,共享內(nèi)存。

補(bǔ)充:

ps -ef | grep java 或 docker top 容器id ,可查看pid的一些信息。

ps aux | grep java。

top -p pid。

RSS 是常駐內(nèi)存集(Resident Set Size),表示該進(jìn)程分配的內(nèi)存大小。

RSS 不包括進(jìn)入交換分區(qū)的內(nèi)存。

RSS 包括共享庫(kù)占用的內(nèi)存(只要共享庫(kù)在內(nèi)存中)

RSS 包括所有分配的棧內(nèi)存和堆內(nèi)存。

VSZ 表示進(jìn)程分配的虛擬內(nèi)存。

VSZ 包括進(jìn)程可以訪問(wèn)的所有內(nèi)存,包括進(jìn)入交換分區(qū)的內(nèi)容,以及共享庫(kù)占用的內(nèi)存。

VSZRW:未百度到具體含義,猜測(cè):初始申請(qǐng)的虛擬內(nèi)存大小。

docker stats 容器名 或 docker stats 容器id,結(jié)果如下:

CONTAINER      CPU %        MEM USAGE / LIMIT     MEM %        NET I/O   BLOCK I/O    PIDS
 

補(bǔ)充:docker容器化下的JVM參數(shù)調(diào)優(yōu)

1、JVM堆內(nèi)存設(shè)置

跑在docker容器的Java服務(wù)發(fā)生過(guò)幾次內(nèi)存超標(biāo)異常,實(shí)際上這和Java程序的docker容器化有很大的關(guān)系。Java和docker并不是天然的朋友,docker可以設(shè)置內(nèi)存和CPU限制,底層通過(guò)Linux cgroup技術(shù)實(shí)現(xiàn),但是Java JVM并不能自動(dòng)檢測(cè)到。

我們可以使用Java的Xmx標(biāo)識(shí)手動(dòng)指定堆內(nèi)存的大小或者使用較高版本的JDK提供的JVM標(biāo)識(shí),解決這個(gè)問(wèn)題。

問(wèn)題:

舊版本Java8(update 131之前的版本),JVM的可用內(nèi)存和CPU數(shù)量并不是docker允許你使用的可用內(nèi)存和CPU數(shù)量

比如docker容器中限制只能使用1G,但是舊版本Java并不能識(shí)別到這個(gè)限制,當(dāng)業(yè)務(wù)增長(zhǎng)時(shí),JVM就會(huì)申請(qǐng)更多內(nèi)存,可能遠(yuǎn)超這個(gè)限制。但是如果使用太多內(nèi)存,docker就會(huì)采取行動(dòng)并殺死容器內(nèi)的Java進(jìn)程,顯然這不是我們想要的!

目前我們生產(chǎn)環(huán)境使用Java8版本,這個(gè)問(wèn)題可通過(guò)-Xmx限制堆內(nèi)存大小來(lái)解決,不過(guò)這里實(shí)際限制了兩次,一次是docker容器的內(nèi)存限制,一次是jvm堆內(nèi)存的限制。

解決方法:

這個(gè)前提需要Java程序的dockerfile支持:

# 初始鏡像
FROM adoptopenjdk/openjdk8
# jar包名字需要更改為項(xiàng)目名字-版本號(hào),后面app.jar 不變
ADD example-sun-1.0.jar app.jar
# 配置JVM啟動(dòng)參數(shù)
ENV JVM_ARGS=${JVM_ARGS}
EXPOSE 8080
# 優(yōu)化jvm參數(shù)配置啟動(dòng)
ENTRYPOINT java ${JVM_ARGS} -Djava.security.egd=file:/dev/./urandom -jar app.jar

具體在k8s deployment.yaml 部署文件中環(huán)境變量 env 中加入以下參數(shù),當(dāng)JVM 啟動(dòng)時(shí)就會(huì)加載進(jìn)去

- name: JVM_ARGS
 value: -Xmx1024m -Xms512m

Xmx1024m #設(shè)置jvm堆內(nèi)存的最大值

-Xms512m #設(shè)置jvm堆內(nèi)存的最小值

這里設(shè)置最小堆內(nèi)存為512m,最大內(nèi)存為1024m, 堆內(nèi)存調(diào)整不要一味簡(jiǎn)單增大,要仔細(xì)分析內(nèi)存占用過(guò)大的原因,是否有代碼上的問(wèn)題。

較高版本Java9之后(8u131+)JVM提供更好的解決方式

使用JVM 標(biāo)志: -XX:+UnlockExperimentalVMOptions-XX:+UseCGroupMemoryLimitForHeap

強(qiáng)制JVM檢查L(zhǎng)inux的cgoup配置,實(shí)際上docker正是通過(guò)Linux的cgroup技術(shù)來(lái)限制容器的內(nèi)存等資源的?,F(xiàn)在如果應(yīng)用達(dá)到了docker設(shè)置的限制(比如1G),JVM是可以看到這個(gè)限制的,JVM就會(huì)嘗試GC操作。

如果gc之后仍然超過(guò)內(nèi)存限制,那JVM就會(huì)做它該做的事情,比如拋出OutOfMemoryException.也就是說(shuō),JVM能夠識(shí)別到docker的這些設(shè)置。

2、GC日志打印以及OOM自動(dòng)dump

程序運(yùn)行過(guò)程中,也可以打印GC日志,方便排查問(wèn)題, 同時(shí)當(dāng)Java發(fā)生OutOfMemory 異常時(shí)可將heap 內(nèi)存 dump 下來(lái)方便我們排查問(wèn)題使用,設(shè)置以下參數(shù):

- name: JVM_ARGS
 value: -Xmx1536m -Xms512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/my-heap-dump.hprof -Xloggc:/logs/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps

參數(shù)含義:

# 發(fā)生內(nèi)存溢出自動(dòng)dump內(nèi)存文件
-XX:+HeapDumpOnOutOfMemoryError
############ 指定dump文件地址為服務(wù)打印日志文件夾/logs(已掛載)
-XX:HeapDumpPath=/logs/my-heap-dump.hprof
############ 打印服務(wù)gc日志
-Xloggc:/logs/gc.log
# 輸出詳細(xì)GC日志
-XX:+PrintGCDetails
# 格式化輸出時(shí)間戳 2020-09-17T19:45:05.680+0800
-XX:+PrintGCDateStamps

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • docker容器資源配額控制詳解

    docker容器資源配額控制詳解

    本篇文章主要介紹了docker容器資源配額控制詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • IDEA集成Docker實(shí)現(xiàn)一鍵部署的詳細(xì)過(guò)程

    IDEA集成Docker實(shí)現(xiàn)一鍵部署的詳細(xì)過(guò)程

    這篇文章主要介紹了IDEA集成Docker實(shí)現(xiàn)一鍵部署,Docker基于Windows集成IDEA,本文分步驟通過(guò)圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • docker compose部署cassandra集群的操作代碼

    docker compose部署cassandra集群的操作代碼

    這篇文章主要介紹了docker compose部署cassandra集群的操作代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-03-03
  • 解決docker報(bào)錯(cuò)Encountered errors while bringing up the project實(shí)測(cè)有效

    解決docker報(bào)錯(cuò)Encountered errors while bringing&n

    這篇文章主要介紹了解決docker報(bào)錯(cuò)Encountered errors while bringing up the project實(shí)測(cè)有效!具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 使用docker快速搭建Spark集群的方法教程

    使用docker快速搭建Spark集群的方法教程

    通過(guò)使用 Docker,可以快速的在本地搭建一套 Spark 環(huán)境,方便大家開(kāi)發(fā) Spark 應(yīng)用,或者擴(kuò)展到生產(chǎn)環(huán)境。下面這篇文章主要給大家介紹了使用docker快速搭建Spark集群的方法教程,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-06-06
  • docker swam集群如何實(shí)現(xiàn)負(fù)載均衡

    docker swam集群如何實(shí)現(xiàn)負(fù)載均衡

    這篇文章主要介紹了docker swam集群如何實(shí)現(xiàn)負(fù)載均衡問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 清理Docker磁盤(pán)空間的幾種有效方法

    清理Docker磁盤(pán)空間的幾種有效方法

    隨著Docker的廣泛使用,管理Docker占用的磁盤(pán)空間變得越來(lái)越重要,長(zhǎng)時(shí)間運(yùn)行Docker環(huán)境,未使用的容器、鏡像、卷和網(wǎng)絡(luò)等會(huì)逐漸積累,占用大量磁盤(pán)空間,本文將介紹幾種清理Docker磁盤(pán)空間的有效方法,需要的朋友可以參考下
    2024-08-08
  • Docker部署ElasticSearch和ElasticSearch-Head的實(shí)現(xiàn)

    Docker部署ElasticSearch和ElasticSearch-Head的實(shí)現(xiàn)

    這篇文章主要介紹了Docker部署ElasticSearch和ElasticSearch-Head的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • docker安裝MinIO全過(guò)程

    docker安裝MinIO全過(guò)程

    這篇文章主要介紹了docker安裝MinIO全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Docker配置代理的詳細(xì)步驟記錄

    Docker配置代理的詳細(xì)步驟記錄

    docker是一個(gè)流行的容器化平臺(tái),它讓?xiě)?yīng)用程序可以在操作系統(tǒng)層面上隔離運(yùn)行,從而提供了更高的可移植性和可靠性,這篇文章主要給大家介紹了關(guān)于Docker配置代理的詳細(xì)步驟,需要的朋友可以參考下
    2024-08-08

最新評(píng)論