JAVA性能优化思路探究

1、背景
一个系统的上线除了??常规的功能测试外,还需要经过严格的性能测试,达到预期的性能指标(一般包括响应时间、tps等),才能进入生产环境 。
广义性能测试一般还包括负载测试(用于测试系统的容量:即在保证一定响应时间的情况下,系统允许多少并发用户访问)、压力测试(用于测试系统的稳定性)系统:即在保证一定的响应时间)一定压力下,检查测试系统的稳定性)、并发测试(即测试系统的多并发能力:即测试模拟多个用户访问同一个应用程序以发现并发问题,例如线程锁、资源竞争和数据库死锁等等 。
通过性能测试,可以帮助我们尽快找到系统的瓶颈 。如果您发现未达到预期的业务目标,则需要进行性能调整 。性能调优的需求有时来自原型的验证,有时来自生产中的实际问题 。不管是哪一种性能调优,我们一般都会遵循性能监控、性能分析、性能优化的步骤 。以下部分提供了对每个步骤的详细分析 。
2、性能监控
性能监控是性能调优的第一步 。主要目的是了解系统当前运行状态、当前服务器资源使用情况、JVM内存使用情况、线程使用情况等,以便第一时间找到瓶颈点 。
2.1 查看服务器配置
为了更好地评估服务器性能,首先应该了解当前托管服务器的配置 。以下主要是针对linux服务器给出的常用查看命令 。
2.1.1 CPU 配置
对于CPU来说,更关心的是CPU的逻辑核心总数,可以直接查看 。

JAVA性能优化思路探究

文章插图
您可以使用 cat /proc/ 查看 CPU 的型号:
JAVA性能优化思路探究

文章插图
2.1.2 内存配置
使用free命令查看,可以看到总内存和使用情况
JAVA性能优化思路探究

文章插图
2.1.3 磁盘配置
使用 fdisk -l 查看所有磁盘配置,使用 df -TH 查看当前磁盘的目录挂载
JAVA性能优化思路探究

文章插图
有时需要确认当前磁盘是否为SSD盘,判断cat /sys/block/*/queue/的返回值(其中*为你的硬盘设备名称,如sda等),如果返回1,则表示磁盘可以旋转,则为HDD;否则,如果返回 0,则表示磁盘无法旋转,则可能是 SSD 。如下图,sda是SSD盘 。
2.1.4 网络配置
使用命令可以看到网卡的配置 。有时候,需要查看当前网卡是1000M还是,可以通过查看速度来判断 。如下图,eth4是千M网卡 。
JAVA性能优化思路探究

文章插图
2.2 服务器监控
为了实时了解系统运行时的资源使用情况,我们需要对服务器的系统资源进行监控 。下面列出常用命令和常用监控项 。
2.2.1 CPU 监控
使用命令,2表示每2秒统计一次
JAVA性能优化思路探究

文章插图
专注于观察
? Procs中的r值,表示调度器运行队列的长度 。如果该值长期大于 CPU 逻辑核数的 1 倍,则需要注意 。如果超过3-4次,需要立即采取措施
? in(中断),cs(上下文切换),如果这两个值较大,说明系统内核消耗CPU较多
? 在Cpu一栏,如果us(用户态)的占比长期大于50%,则需要考虑优化算法 。根据经验,us+sy比例的参考值为80%
您可以使用 -w -I -p pid 2 来监控应用程序的锁争用情况
JAVA性能优化思路探究

文章插图
让步上下文切换(cswch)占用时钟周期的3%到5%,说明Java应用面临锁竞争,抢占式上下文切换率()高,说明准备运行的线程数多于可用虚拟处理器的数量 。