这篇文章上次修改于 2023 天前,可能其部分内容已经发生变化,如有疑问可询问作者。 >操作系统和JDK提供了一系列工具. 1.cpu使用率 (CPU usage) + CPU使用率 分为两个分类----操作系统时间 system time 和 用户时间 User time + 性能调优的目的是短时间内CPU的使用率越高越好,因为CPU使用率是一个数据----5秒钟,或者30秒中,cpu的使用率。如果使用率从50%到达了100%,那么程序的性能是翻倍了的。原来的10分钟时间,现在可能只需要5分钟 1.1.vmstat 1 ---每1秒打印信息 ```bash procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 4608 1862336 336860 6909040 0 0 13 28 52 34 23 7 70 0 0 2 0 4608 1865588 336860 6909040 0 0 0 0 4421 27162 9 6 84 0 0 0 0 4608 1864928 336860 6909040 0 0 0 0 4211 27532 10 6 84 0 0 3 0 4608 1871600 336916 6909040 0 0 0 680 4091 24751 4 7 89 0 0 0 0 4608 1872072 336916 6909044 0 0 0 0 3940 24003 5 6 89 0 0 ``` 第一行的信息,us 用户使用了34%,sy 系统占用了23%,表示CPU的总使用率是57%,也就是说这1秒,570毫秒,cpu在忙,剩余的430毫秒cpu空闲。空闲的原因可能有以下: + application 被阻塞blocked 在一个一个同步原语primitive,直到那个锁被释放 + application 正在等待某些东西,例如数据库的返回 + application 确实have nothing to do + 前两种情况,可优化锁和IO,第三种情况,CPU会话执行一部分application code。 + 单核CPU对于批处理,cpu肯定越高越好,但是对于server类,cpu在等待request进来,如果一个request请求需要400ms,那么我们要优化他的峰值时间,占用cpu40%,即400ms内尽量都是峰值。 + 多核CPU 1.3.CPU 运行队列(unix 叫run queue,windows 叫processor queue),-----可以运行的线程数。vmstat中的1和2列,分别是r运行中等待的线程数,b 等待io的先成熟 1.4 磁盘使用优化,以下两种都需要优化 + application 写数据没有有效的缓冲,导致IO统计数据很低 + application 执行的IO超过了磁盘负载,IO统计数据很高 ```bash iostat -xm 5 #x表示额外信息,m表示MB单位,5表示5秒刷新 Device r/s rMB/s rrqm/s %rrqm r_await rareq-sz w/s wMB/s wrqm/s %wrqm w_await wareq-sz d/s dMB/s drqm/s %drqm d_await dareq-sz aqu-sz %util sda 1.30 0.06 0.01 0.92 0.43 48.72 3.50 0.15 3.47 49.74 1.24 42.48 0.32 0.16 0.00 0.00 0.56 525.02 0.00 0.11 sdb 0.00 0.00 0.00 0.00 7.56 36.05 0.00 0.00 0.00 0.00 2.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 ``` + CPU使用率%system 和 w/s没秒写入次数 和wMB/s写入速率可以反映一些问题,CPU很高,写入次数很多,但是写入的速率wMB/s很低。表示有低效的事情发生 + %util 使用率100%,就是io性能瓶颈了。 1.5关于内存交换swap,系统会把分配给application的内存,不用的那部分写道磁盘上,这对一些GUI程序很好,因为可以节省你笔记本的内存,但是对于JAVA这种堆内存就不那么友好了。因为这个性能很糟糕。 + 我们可以用vmstat的换进si 和so换出来查看系统的磁盘和内存交换情况。 + 我们可以使用nistat查看网络使用率,如果读取是0.22MBps,写入是0.16MBps,那么1000Mb的网卡,实际课题哦难过125Mb/s,那么网卡的使用率是(0.22+ 0.16)/125 = 0.33% 。注意网卡的使用率是没法达到100%的,40%说明网卡已经满了。 2.JAVA监控工具
没有评论