??????歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內(nèi)容和知識(shí),也可以暢所欲言、分享您的想法和見解。
- 推薦:kwan 的首頁,持續(xù)學(xué)習(xí),不斷總結(jié),共同進(jìn)步,活到老學(xué)到老
- 導(dǎo)航
- 檀越劍指大廠系列:全面總結(jié) java 核心技術(shù)點(diǎn),如集合,jvm,并發(fā)編程 redis,kafka,Spring,微服務(wù),Netty 等
- 常用開發(fā)工具系列:羅列常用的開發(fā)工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
- 數(shù)據(jù)庫系列:詳細(xì)總結(jié)了常用數(shù)據(jù)庫 mysql 技術(shù)點(diǎn),以及工作中遇到的 mysql 問題等
- 懶人運(yùn)維系列:總結(jié)好用的命令,解放雙手不香嗎?能用一個(gè)命令完成絕不用兩個(gè)操作
- 數(shù)據(jù)結(jié)構(gòu)與算法系列:總結(jié)數(shù)據(jù)結(jié)構(gòu)和算法,不同類型針對(duì)性訓(xùn)練,提升編程思維,劍指大廠
非常期待和您一起在這個(gè)小小的網(wǎng)絡(luò)世界里共同探索、學(xué)習(xí)和成長。?????? ?? 歡迎訂閱本專欄 ??
一.非容器啟動(dòng)
1.第一步
#第一步:通過jps命令確認(rèn)jvm進(jìn)程號(hào)
[root@dataprocess-server]# jps -l
19570 customer-datap-1.3.2.jar
10589 sun.tools.jps.Jps
2.第二步
#第二步:通過jmap命令dump堆內(nèi)存文件到指定目錄
[root@dataprocess-server]# jmap -dump:format=b,file=/temp/dump.thprof 19570
Dumping heap to /temp/dump.thprof ...
Heap dump file created
3.OOM 自動(dòng)生成文件
配置OOM自動(dòng)生成dump文件:
在 Java 虛擬機(jī)(JVM)啟動(dòng)時(shí),可以通過設(shè)置一些參數(shù)來配置 OutOfMemoryError(OOM)時(shí)自動(dòng)生成 Dump 文件。Dump 文件是 JVM 在遇到 OOM 時(shí)生成的一種內(nèi)存轉(zhuǎn)儲(chǔ)文件,它包含了 JVM 堆內(nèi)存的快照,有助于診斷內(nèi)存溢出問題。
#JVM在發(fā)生OutOfMemoryError時(shí)生成Heap Dump文件
java -XX:+HeapDumpOnOutOfMemoryError -jar your_application.jar
#指定Heap Dump文件的輸出路徑
java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump/files -jar your_application.jar
#當(dāng)發(fā)生OutOfMemoryError時(shí),執(zhí)行指定的命令
java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump/files -XX:OnOutOfMemoryError="kill -9 %p" -jar your_application.jar
二.容器啟動(dòng)
1.容器的基本信息
#docker容器的基本信息
docker stats
#這里的PIDS是容器內(nèi)的PID,基本上沒什么用
2.Dockerfile 配置
FROM openjdk:latest
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
WORKDIR /home
USER root
ENV PROFILE="dev"
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8
ENV JAVA_OPTS="\
-Xms4g \
-Xmx4g \
-Xmn2g \
-Xss1m \
-XX:SurvivorRatio=8 \
-XX:MaxTenuringThreshold=10 \
-XX:+UseConcMarkSweepGC \
-XX:CMSInitiatingOccupancyFraction=70 \
-XX:+UseCMSInitiatingOccupancyOnly \
-XX:+AlwaysPreTouch \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=:./logs/gc \
-verbose:gc \
-XX:+PrintGCDetails \
-XX:+PrintGCDateStamps \
-XX:+PrintGCTimeStamps \
-Xloggc:./logs/gc/gc.log \
"
ENV PARAMS=""
COPY ./insight-provider/target/*.jar /home/app.jar
EXPOSE 80
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
RUN echo -e 'mkdir -p ./logs/gc && java $JAVA_OPTS -jar ./app.jar --spring.profiles.active=$PROFILE $PARAMS' > entrypoint.sh
ENTRYPOINT ["sh", "entrypoint.sh"]
3.啟動(dòng)腳本
#!/usr/bin/env bash
CONTAINER_NAME=insight-command
IMAGE_NAME=xxx.xxx.com/xxx-uat/xxx-xx-xx-insight-command:$1
docker rm -f ${CONTAINER_NAME}
docker rmi ${IMAGE_NAME}
docker pull ${IMAGE_NAME}
docker run -d --name ${CONTAINER_NAME} \
--privileged=true \
-e PROFILE=uat \
-e PARAMS="--logging.level.root=info" \
-w /home \
-p 8090:80 \
-v $PWD/logs:/home/logs \
-v /home/uploads:/home/uploads \
--restart=always ${IMAGE_NAME}
docker logs -f --tail 500 ${CONTAINER_NAME}
覺得有用的話點(diǎn)個(gè)贊
????
唄。
??????本人水平有限,如有紕漏,歡迎各位大佬評(píng)論批評(píng)指正!????????????如果覺得這篇文對(duì)你有幫助的話,也請(qǐng)給個(gè)點(diǎn)贊、收藏下吧,非常感謝!?? ?? ??
??????Stay Hungry Stay Foolish 道阻且長,行則將至,讓我們一起加油吧!??????文章來源:http://www.zghlxwxcb.cn/news/detail-797275.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-797275.html
到了這里,關(guān)于【JVM調(diào)優(yōu)系列】如何導(dǎo)出堆內(nèi)存文件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!