Java基础之《JVM性能调优(16)—系统并发性能调优》

对于服务器来说,QPS上不去,无非3个原因,CPU、内存、网络问题。

一、CPU性能调优分析

1、查看CPU利用率
1)查看服务的CPU利用率(top命令)
应用CPU占20%,空闲80%

2)查看jmeter的CPU
正常

2、如何调优
用arthas查看线程
用jvisualvm查看CPU使用率,线程组都是绿的

二、网络性能调优分析

1、查看网卡
先使用ifconfig命令,查看当前所需ip对应的网卡名,比如eth0

2、查看网卡类型(是千兆还是百兆)
命令:ethtool 网卡名
比如ethtool eth0

3、查看网卡流量
命令:nload 网卡名
比如nload eth0

nload命令查看网卡当前流量。
nload命令可以查看各个网络设备的当前网络速率,也会展示流经设备的总流量。
CentOS安装命令:
yum install -y epel-release && yum install -y nload

4、说明

Incoming:进入网卡的流量
Outgoing:出网卡的流量
Curr:当前流量
Avg:平均流量
Min:最小流量
Max:最大流量
Ttl:总和流量

三、内存jvm性能调优

1、jvisualvm连接远程服务器jvm

1)在远程机器上添加权限策略文件
在服务器{JAVA_HOME}/bin目录建立文件:jstatd.all.policy

grant codebase "file:${java.home}/../lib/tools.jar" {    
        permission java.security.AllPermission;    
};

2)启动远程机器的jstatd

jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=10.1.117.2 -J-Djava.rmi.server.logCalls=true

说明:
-J-Djava.rmi.server.hostname:设置主机IP
-J-Djava.rmi.server.logCalls:启动RMI日志功能

3)本地jvisualvm加入远程主机

2、jvisualvm安装插件
工具 - 插件(全部安装)

如果无法下载可以手动下载Visual GC插件再导入:
https://visualvm.github.io/uc/8u131/updates.html
工具 - 插件 - 已下载 - 添加插件

3、分析java服务
花费多少次gc,stw总共耗费多长时间?

1)tomcat设置200个线程,demo服务堆设置512M:
18次gc,old区2次gc,吞吐量80

2)提升java服务的jvm大小
堆设置为1g

java -jar -Xms1g -Xmx1g -Dspring.config.location=/appserver/application.properties demo-0.0.1-SNAPSHOT.jar &

12次gc,old区2次gc,吞吐量85

3)提升java服务的jvm为G1

java -jar -Xms1g -Xmx1g -XX:+UseG1GC -Dspring.config.location=/appserver/application.properties demo-0.0.1-SNAPSHOT.jar &

14次gc,old区0次gc,吞吐量90

四、tomcat性能调优

1、参数
#最大线程数是300,初始化线程是100
server.tomcat.threads.min-spare=100
server.tomcat.threads.max=300
server.tomcat.accept-count=1000
server.tomcat.max-connections=2000
server.tomcat.connection-timeout=2000

2、说明
1)server.tomcat.threads.min-spare:最小线程数
2)server.tomcat.threads.max:最大线程数
3)server.tomcat.accept-count:
accpet-count当调用web服务的http请求数达到tomcat的最大线程数时,还有新的http请求到来,这是tomcat会将该请求放在等待队列中,这个accept-count就是指能够接受的最大等待数,默认100。如果等待队列也放满了,这个时候再来新的请求就会被tomcat拒绝(connection refused)
4)server.tomcat.max-connections:最大链接数,默认不设置,默认是10000。这个参数是指在同一时间,tomcat能够接受的最大连接数。一般这个值要大于(max-threads)+(accept-count)
5)server.tomcat.connection-timeout:链接建立超时时间,最长等待时间,如果没有数据进来,等待一段时间后断开连接,释放线程

3、测试
还是1g堆内存,G1垃圾收集器,添加tomcat参数,吞吐量100

五、小结
针对springboot项目
1、cpu:一般不用怎么改,默认200条线程就行。
2、网络:每秒传输100k,对网卡而言小意思了
3、内存:建议今后的项目都采用G1就行了,G1的性能相对而言是较好的
4、tomcat:优化线程和连接数
5、linux参数:减少TIME_WAIT,加大ulimit最大进程数和最大文件打开数
vi /etc/security/limits.conf
*     soft     nofile    65536
*     hard     nofile    65536
6、监控系统资源,比如CPU使用率、磁盘响应时间

图上cpu快跑满,磁盘响应快1s。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值