系统调优

本文介绍如何使用dstat、netstat、sar等工具监控系统资源如CPU、内存、网卡状态,以及如何利用jstack、jmap、jstat进行JVM调优,包括内存分配、垃圾回收策略和线程配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//监控CPU、内存、网卡

dstat -t -clmnsyr --tcp --net-packets -N eth0,eth1


//查看接口连接数

netstat -an |grep 20888 |awk '{print $5}'|awk -F: '{print $4}' |sort |uniq -c | sort --sort=n


//监控CPU、内存、网卡

sar -u -n DEV -n TCP -b -B -q -W -S -t 1


抓堆栈

/usr/java/jdk1.7.0_76/bin/jstack (pid)21792 >/tmp/of.txt


堆栈

jmap -heap pid


JVM 抓取GC的回收频次和回收时间

jstat -gcutil pid 1000 300


JVM 调优分配

1、分配JVM内存可以通过xms分配最小内存,xmx分配最大内存,最好xms=xmx, 以避免每次垃圾回收完成后JVM重新分配内存。。

2、jvm内存回收,采用分代试回收,jvm 分为新生代(Eden区、survivor区)、老年代。

3、-xmn来制定新生代大小,通过-XX:SurvivorRation来调整eden和survivor两个区域的大小。

4、-Xmn2g设置年轻代大小为2G。总内存分配大小为4G,年轻代大小为2G,持久代大小默认为64M,增大年轻代,注定要减少老年代的内存分配大小。

5、-Xss128K,设置每个线程的堆栈大小为128K,默认每个线程大小为1M,内存固定的情况下,减少每个线程的大小将会生成更多的线程。理想的值应该在3000-5000范围内。

另一种方式为通过比例设置( java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0):

1、JVM内存分配最大内存4G,最小内存为4G,避免每次垃圾回收后,重新分配JVM内存。

2、-Xss128k 设置每个线程的大小为128K。

3、-XX:NewRatio=4:设置年轻代和老年代占比,年轻代包含(eden和两个survivor)与老年代的占比(除去持久代)。年轻代与老年代的占比为1:4。

4、-XX:SurvivorRation=4设置年轻代,eden区和survivor的占比,单一survivor占比为1/6

5、-XX:MaxPermSize=16m 设置之久代的大小为16M

6、-XX:MaxTenuringThreshold=0,这3

7、吞吐量优先的场景,选择并行收集。响应时间优先,选择并发收集。

8、 响应时间优先的应用:年老代使用并发收集器,所以其大小需要小心设置,一般要考虑并发会话率和会话持续时间等一些参数。如果堆设置小了,可以会造成内存碎片、高回收频率以及应用暂停而使用传统的标记清除方式;如果堆大了,则需要较长的收集时间。最优化的方案,一般需要参考以下数据获得:

* 并发垃圾收集信息

* 持久代并发收集次数

* 传统GC信息

* 花在年轻代和年老代回收上的时间比例

转载于:https://my.oschina.net/u/3674060/blog/3036858

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值