目的
- 减小响应时间
- 提高吞吐量
参数
- -XX:UseXXXGC
- -Xms和-Xmx
- -XX:NewRatio
- -XX:SurvivorRatio
- -XX:+UseAdaptiveSizePolicy
- -XX:+HeapDumpOnOutOfMemoryError
- -XX:HeapDumpPath
- -XX:MaxTenuringThreshold
- -Xloggc:/xxx/logs/xxx-gc-%t.log
-XX:+UseGCLogFileRotation
-XX:+NumberOfGCLogFiles=5
-XX:+GCLogFileSize=20M
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
步骤
- 熟悉业务场景
- 选择合理的垃圾收集器
- 计算内存需求
- 设定年轻代老年大小
- 设置日志参数
- 压力测试
- 分析日志
- 调整参数
实例操作
运行打包好的jar 对比测试
比对一:nohup java -jar xxx.jar >stock.log 2>&1&
比对二:nohup java -jar -Xmx1500m -Xms1500m -XX:SurvivorRatio=8 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:./gclogs xxx.jar >stock.log 2>&1&
查看是否运行
jps -l
进行模拟10个用户10W次请求
命令:ab -c 10 -n 100000 http://127.0.0.1:9091/stock/xxxx
注:若没有ab命令,安装yum -y install httpd-tools
打印日志:
jstat -gc 4102 5000 20|awk '{print $13,$14,$15,$16,$17}'
最后可以通过gcviewer工具 查看分析
通常遇到CPU 100%或者占用率非常高的时候,可以进行以下方法查找:
使用top 命令
[root@localhost ~]# top
根据进程号,查看堆栈的情况
[root@localhost ~]# jps -l
[root@localhost ~]# jstack 4856
导出文件
[root@localhost ~]# jstack 4856 >> 4856.txt
由于导出的文件内容信息多,需要定位线程信息
[root@localhost ~]# ps -mpp 4856 -o THREAD,tid,time
由于结果查找出来得结果为16进制,需转换成10进制
[root@localhost ~]# printf "%x\n" 4856
根据10进制数,进入4856.txt文件查找
[root@localhost ~]# vi 4856.txt
谢谢观看阅读,麻烦点个赞呀呀呀呀呀呀,谢谢~~~~