[apper@localhost ~]$ top top - 09:52:14 up 35 days, 9:41, 2 users, load average: 2.54, 2.95, 3.11 Tasks: 287 total, 1 running, 186 sleeping, 2 stopped, 0 zombie %Cpu(s): 11.9 us, 11.2 sy, 0.0 ni, 75.1 id, 0.2 wa, 0.0 hi, 1.6 si, 0.0 st KiB Mem : 49329284 total, 2005136 free, 25174992 used, 22149156 buff/cache KiB Swap: 0 total, 0 free, 0 used. 22823200 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 121256 root 20 0 6723500 492212 17144 S 41.2 1.0 11890:22 java 96211 polkitd 20 0 4819148 818316 22584 S 36.2 1.7 12312:43 mysqld 89775 root 20 0 8254936 1.5g 19848 S 9.3 3.1 1878:47 java 116991 root 20 0 7947396 743292 19852 S 8.6 1.5 1225:04 java 7270 root 20 0 7986376 841536 19856 S 8.3 1.7 2316:39 java 700 root 20 0 7914276 639304 19768 S 8.0 1.3 2270:26 java 9510 root 20 0 7912208 678232 19936 S 8.0 1.4 2279:26 java 24010 root 20 0 8028572 859676 20160 S 8.0 1.7 1087:37 java 55083 root 20 0 7893760 608144 19760 S 8.0 1.2 2457:58 java 57294 root 20 0 7932900 714536 19768 S 8.0 1.4 2490:02 java 129103 root 20 0 8031076 854000 19776 S 8.0 1.7 2328:38 java 3970 root 20 0 7931068 692040 19744 S 7.6 1.4 2291:51 java 7937 root 20 0 7918376 671364 19784 S 7.6 1.4 2272:11 java 49430 root 20 0 7932784 673488 19704 S 7.6 1.4 2489:31 java 71330 root 20 0 6995948 759592 20892 S 7.6 1.5 2479:27 java 127364 root 20 0 7905004 697332 19864 S 7.6 1.4 2257:43 java 130592 root 20 0 8070556 1.2g 19788 S 7.6 2.6 2287:55 java [apper@localhost ~]$ uptime 09:52:25 up 35 days, 9:41, 2 users, load average: 3.24, 3.09, 3.15
-
看CPU和内存
-
看load average,三个值分别表示系统1分钟、5分钟、15分的平均负载值。三个数相加除以3,再乘100%,如果高于60%,表示系统负担压力重
-
退出命令:q
-
uptime命令是top命令的精简版
-
主要是查看整机性能
主要查看CPU(包含但不限于)
[apper@localhost ~]$ vmstat -n 2 3 # 每2秒采样一次,共计采样3次 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 4 0 0 1845776 2104 22163804 0 0 0 79 0 2 18 9 74 0 0 2 0 0 1845420 2104 22164084 0 0 0 596 35570 54426 12 13 76 0 0 4 0 0 1845012 2104 22164320 0 0 0 1240 35678 54566 12 13 76 0 0 [apper@localhost ~]$
vmstat -n 2 3
一般vmstat
工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒;第二个参数是采样的次数
- procs
- r:运行和等待时间片的进程数,原则上1核CPU的运行队列不超过2,整个系统运行队列不超过总核数的2倍,否则表示系统压力过大。
- b:等待资源的进程数,比如正在等待磁盘I/O、网络I/O等
- cpu
- us:用户进程消耗CPU时间百分比,us值高,用户进程消耗CPU时间多,如果长期大于50%,优化程序
- sy:内核进程消耗的CPU时间百分比
- us + sy参考值80%,如果大于80%,表示CPU不足
- id:处于空闲的CPU百分比
- wa:系统等待IO的CPU时间占比
- st:来自于一个虚拟机偷取的CPU时间百分比
查看所有CPU核信息:mpstat -P ALL 2
[apper@localhost ~]$ mpstat -P ALL 2 Linux 5.4.94-1.el7.elrepo.x86_64 (localhost.localdomain) 07/15/2022 _x86_64_ (8 CPU) 10:38:19 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 10:38:21 AM all 29.14 0.00 9.61 0.07 0.00 1.32 0.00 0.00 0.00 59.87 10:38:21 AM 0 32.79 0.00 7.10 0.00 0.00 7.65 0.00 0.00 0.00 52.46 10:38:21 AM 1 25.53 0.00 11.17 0.00 0.00 0.00 0.00 0.00 0.00 63.30 10:38:21 AM 2 34.02 0.00 10.31 0.00 0.00 0.52 0.00 0.00 0.00 55.15 10:38:21 AM 3 25.00 0.00 10.42 0.00 0.00 0.52 0.00 0.00 0.00 64.06 10:38:21 AM 4 37.50 0.00 7.81 0.00 0.00 0.00 0.00 0.00 0.00 54.69 10:38:21 AM 5 25.79 0.00 10.53 0.53 0.00 0.53 0.00 0.00 0.00 62.63 10:38:21 AM 6 23.16 0.00 10.53 0.00 0.00 0.00 0.00 0.00 0.00 66.32 10:38:21 AM 7 29.47 0.00 9.47 0.53 0.00 0.53 0.00 0.00 0.00 60.00
3. free每个进程使用CPU的用量分解信息:pidstat -u 1 -p 进程编号
用于查看内存
[apper@localhost ~]$ free total used free shared buff/cache available Mem: 49329284 25139784 1635004 863884 22554496 22849624 Swap: 0 0 0 [apper@localhost ~]$ free -g total used free shared buff/cache available Mem: 47 23 1 0 21 21 Swap: 0 0 0 [apper@localhost ~]$ free -m total used free shared buff/cache available Mem: 48173 24550 1595 843 22026 22314 Swap: 0 0 0 [apper@localhost ~]$
常用free -m
经验值:
- 应用程序可用内存/系统物理内存 > 70% ,内存充足
- 应用程序可用内存/系统物理内存 < 20% ,内存不足,需要增加内存
- 20% < 应用程序可用内存/系统物理内存 < 70%, 基本够用。
用于查看硬盘信息
[apper@localhost ~]$ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 24G 0 24G 0% /dev tmpfs 24G 0 24G 0% /dev/shm tmpfs 24G 844M 23G 4% /run tmpfs 24G 0 24G 0% /sys/fs/cgroup /dev/mapper/centos-root 483G 148G 336G 31% / /dev/sda1 1014M 226M 789M 23% /boot /dev/mapper/centos-swap 16G 33M 16G 1% /swap tmpfs 4.8G 0 4.8G 0% /run/user/0 tmpfs 4.8G 0 4.8G 0% /run/user/10005. 磁盘IO:iostat
Linux 5.4.94-1.el7.elrepo.x86_64 (localhost.localdomain) 07/15/2022 _x86_64_ (8 CPU) Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.26 0.03 26.65 1.60 604.67 45.45 0.06 2.68 1.27 2.68 1.04 2.78 dm-0 0.00 0.00 0.03 26.75 1.60 604.67 45.29 0.07 2.50 1.15 2.50 1.04 2.78 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 55.39 0.00 0.47 0.31 18.00 0.50 0.00 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 0.00 12.00 0.00 153.00 25.50 0.01 1.21 0.00 1.21 1.46 1.75 dm-0 0.00 0.00 0.00 12.00 0.00 153.00 25.50 0.01 1.12 0.00 1.12 1.50 1.80 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 0.00 9.50 0.00 190.75 40.16 0.01 1.53 0.00 1.53 1.74 1.65 dm-0 0.00 0.00 0.00 9.50 0.00 190.75 40.16 0.01 1.58 0.00 1.58 1.79 1.70 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
await:IO请求的平均等待时间,单位毫秒。越小越好
%util:1秒钟有百分之的时间用于I/O操作,接近100%时,表示磁盘带宽跑满,需要优化程序或者增加磁盘
查看具体进程信息:
pidstat -d 采样间隔秒数 -p 进程号6. 网络IO:ifstat
ifstat 1
查看网卡的out/in情况
7. 生产环境CPU过高,怎么排查1)先用top命令找出CPU占比最高的
2)ps -ef或者jps进一步定位,得知是一个怎么样的后天程序有问题
# 查询进程编号 jps -l ps -ef|grep java|grep -v grep
3)定位到具体线程或者代码
ps -mp 进程号 -o THREAD,tid,time;
- -m:显示所有的线程
- -p:pid进程使用CPU时间
- -o:该参数后是用户自定义格式
[apper@localhost ~]$ ps -mp 106138 -o THREAD,tid,time; USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME root 92.8 - - - - - - 00:01:02 root 0.0 19 - - - - 106138 00:00:00 root 24.8 19 - - - - 106156 00:00:16 root 0.3 19 - - - - 106157 00:00:00 root 0.3 19 - - - - 106158 00:00:00 root 0.3 19 - - - - 106159 00:00:00 root 0.3 19 - - - - 106160 00:00:00 root 0.3 19 - - - - 106161 00:00:00 root 0.3 19 - - - - 106162 00:00:00 root 0.3 19 - - - - 106163 00:00:00 root 0.3 19 - - - - 106164 00:00:00 root 1.0 19 - - - - 106165 00:00:00 root 0.2 19 - - - - 106166 00:00:00 root 0.2 19 - - - - 106167 00:00:00 root 0.0 19 - - - - 106168 00:00:00 root 17.0 19 - - - - 106169 00:00:11 root 17.9 19 - - - - 106170 00:00:12 root 18.3 19 - - - - 106171 00:00:12 root 6.8 19 - - - - 106172 00:00:04 root 0.0 19 - - - - 106173 00:00:00 root 0.1 19 - - - - 106174 00:00:00 root 0.0 19 - - - - 106182 00:00:00 root 0.0 19 - - - - 106183 00:00:00 root 0.9 19 - - - - 106184 00:00:00 root 0.0 19 - - - - 106249 00:00:00 root 0.0 19 - - - - 106325 00:00:00 root 0.0 19 - - - - 106326 00:00:00 root 0.0 19 - - - - 106327 00:00:00 root 0.0 19 - - - - 106329 00:00:00 root 0.0 19 - - - - 106330 00:00:00 root 0.0 19 - - - - 106341 00:00:00 root 0.0 19 - - - - 106342 00:00:00 root 0.0 19 - - - - 106343 00:00:00 root 0.0 19 - - - - 106344 00:00:00 root 0.0 19 - - - - 106345 00:00:00 root 0.0 19 - - - - 106346 00:00:00 root 0.0 19 - - - - 106347 00:00:00 root 0.0 19 - - - - 106348 00:00:00 root 0.0 19 - - - - 106349 00:00:00 root 0.0 19 - - - - 106350 00:00:00 root 0.0 19 - - - - 106351 00:00:00 root 0.0 19 - - - - 106352 00:00:00
4)将需要的线程ID转换为16进制格式,英文小写。
tid:106156 -> 19eac
5)jstack 进程id|grep tid(16禁止线程ID小写英文) -A60
jstack 106138 |grep 19eac -A60
或者用jstack dump日志
jstack 106138 >> xxx.log 打印出该进程下线程日志