H__D  

一、生产环境服务器变慢,诊断思路和性能评估

1、在Linxu准备数据

(1)在Linux创建一个java循环类(方便测试),代码如下:

package com.study.gc;
public class javaDemo02 {
	public static void main(String[] args) {
		while (true) {	
			    System.out.println(new java.util.Random().nextInt(77778888));
		}
	}
}

(2)由于带了包名,所以先编译

[root@spark2 demo]# javac -d . javaDemo02.java

(3)再次去查看,发现多了"com"的包名

[root@spark2 demo]# ll
total 8
drwxr-xr-x. 3 root root  19 Aug  1 17:36 com
-rw-r--r--. 1 root root 196 Aug  3 19:27 javaDemo02.java
[root@spark2 demo]# 

(4)运行程序

[root@spark2 demo]# java  com.study.gc.javaDemo02

后台不断死循环打印

资源不存在

2、命令操作

LInux命令之top

后台打印,我们可以使用”top“命令,前台查看进程:查看系统的整机命令

[root@spark2 ~]# top
top - 19:37:08 up 22 min,  2 users,  load average: 0.13, 0.07, 0.09  //系统负载均衡
Tasks: 109 total,   2 running, 107 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.0 us,  5.0 sy,  0.0 ni, 93.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3861484 total,  2610840 free,   964692 used,   285952 buff/cache
KiB Swap:  4063228 total,  4063228 free,        0 used.  2628116 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                          
 10185 root      20   0 2957456  46776  11764 S  6.3  1.2   0:29.01 java                                                             
 10086 root      20   0  158768   5616   4268 R  1.0  0.1   0:04.06 sshd                                                             
 10235 root      20   0  162116   2224   1544 R  0.7  0.1   0:00.07 top                                                              
     1 root      20   0  127984   6540   4136 S  0.0  0.2   0:02.19 systemd                                                          
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                                                         
     3 root      20   0       0      0      0 S  0.0  0.0   0:00.19 ksoftirqd/0                                                      
     5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H                                                     
     7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0                                                      
     8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh                                                           
     9 root      20   0       0      0      0 S  0.0  0.0   0:01.59 rcu_sched                                                        
    10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-drain                                                    
    11 root      rt   0       0      0      0 S  0.0  0.0   0:00.21 watchdog/0                                                       
    13 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs                                                        
    14 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns                                                            
    15 root      20   0       0      0      0 S  0.0  0.0   0:00.00 khungtaskd                                                       
    16 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 writeback                                                        
    17 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kintegrityd                                                      
    18 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset                                                           
    19 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset                                                           
    20 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset                                                           
    21 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kblockd                                                          
    22 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 md                                                               
    23 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 edac-poller                                                      
    24 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 watchdogd                                                        
    30 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kswapd0                                                          
    31 root      25   5       0      0      0 S  0.0  0.0   0:00.00 ksmd                                                             
    32 root      39  19       0      0      0 S  0.0  0.0   0:05.96 khugepaged                                                       
    33 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 crypto                                                           
    41 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kthrotld                                                         
    43 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kmpath_rdacd                                                     
    44 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kaluad                                                           
    45 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kpsmoused                                                        
    46 root      20   0       0      0      0 S  0.0  0.0   0:00.88 kworker/0:2                                                      
    47 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 ipv6_addrconf                                                    
    60 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 deferwq   

说明:

load average:0.13,0.07,0.09:系统负载均衡的负载值,若想求出负载值,这3个值相加除以3再乘100%,若求的是60%,系统值还是够的,没什么压力。

查看系统的整机命令:

[root@spark2 ~]# uptime
 19:43:24 up 28 min,  2 users,  load average: 0.26, 0.12, 0.0

Linux之cpu查看vmstat

查看额外

[root@spark2 ~]# vmstat -n 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
 3  0      0 2610884   2108 283856    0    0   119    14  200  391  2  4 93  1  0
 0  0      0 2610900   2108 283888    0    0     0     0  257  322  3  5 92  0  0
 0  0      0 2610900   2108 283888    0    0     0     0  266  328  3  6 92  0  0
[root@spark2 ~]# 
查看vmstat

Linux之cpu查看pidstat

[root@spark2 ~]# ps -ef|grep java
root      10185  10145  7 19:30 pts/0    00:01:32 java com.study.gc.javaDemo02
root      10245  10203  0 19:52 pts/1    00:00:00 grep --color=auto java
[root@spark2 ~]# pidstat -u 1 -p 10185
-bash: pidstat: command not found   //没有这个插件,下载即可

[root@spark2 ~]# yum install sysstat
查看每个进程使用cpu的用量分解信息

 

Linux之内存查看ferr和pidstas

内存:free

(1)应用程序可用内存数

[root@spark2 ~]# free
              total        used        free      shared  buff/cache   available
Mem:        3861484      969036     2473168       11860      419280     2619044
Swap:       4063228           0     4063228
[root@spark2 ~]# 

[root@spark2 ~]# free -g
              total        used        free      shared  buff/cache   available
Mem:              3           0           2           0           0           2
Swap:             3           0           3
[root@spark2 ~]# 

[root@spark2 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3770         946        2415          11         409        2557
Swap:          3967           0        3967
[root@spark2 ~]# 
应用程序可用内存数

(2)查看额外

pidstat -p 进程号 -r 采样间隔秒数

 

Linux之硬盘查看

硬盘:df(查看磁盘剩余空闲数)

[root@spark2 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   36G  7.3G   28G  21% /
devtmpfs                 1.9G     0  1.9G   0% /dev
tmpfs                    1.9G     0  1.9G   0% /dev/shm
tmpfs                    1.9G   12M  1.9G   1% /run
tmpfs                    1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1               1014M  146M  869M  15% /boot
tmpfs                    378M     0  378M   0% /run/user/0
[root@spark2 ~]# 

 

Linux之磁盘IO查看iostat和pidstat

磁盘IO:iostat

(1)磁盘I/O性能评估

[root@spark2 ~]# iostat -xd 2 3
Linux 3.10.0-957.el7.x86_64 (spark2.x)  08/03/2020      _x86_64_        (1 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.07    1.91    0.44    78.54    16.63    81.28     0.03   12.06   13.87    4.13   5.25   1.23
scd0              0.00     0.00    0.00    0.00     0.25     0.00   114.22     0.00    2.00    2.00    0.00   1.61   0.00
dm-0              0.00     0.00    1.35    0.51    70.63    16.12    93.53     0.03   14.78   18.79    4.11   6.50   1.21
dm-1              0.00     0.00    0.02    0.00     0.60     0.00    54.67     0.00    0.32    0.32    0.00   0.19   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    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
scd0              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
dm-0              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
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    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
scd0              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
dm-0              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
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

[root@spark2 ~]# 

(2)查看额外

pidstat -d 采样间隔秒数 -p 进程号

pidstat -d 2 -p 10185

 

Linux之网络IO查看ifstat

网络IO:ifstat

(1)默认本地没有,下载ifstat

//下载
[root@spark2 ~]# wget http://gael.roualland.free.fr/ifstat/ifstat-1.1.tar.gz

//解压
[root@spark2 ~]# tar -zxvf ifstat-1.1.tar.gz 

//进入解压文件目录及编译
[root@spark2 ifstat-1.1]# ./configure  

//编译下载
[root@spark2 ifstat-1.1]# make 
[root@spark2 ifstat-1.1]# make instal

(2)查看网络IO

[root@spark2 ifstat-1.1]# ifstat 1

二、假如生产环境出现CPU占用过高,请谈谈你的分析思路和定位?

1、结合Linux和JDK命令一块分析

2、案例步骤

(1)先用top命令找出CPU占比最高的

(2) ps -ef或者jps进一步定位,得知是一个怎么样的一个后台程序

[root@spark2 ifstat-1.1]# jps -l
11363 sun.tools.jps.Jps
10185 com.study.gc.javaDemo02
10171 -- process information unavailable

[root@spark2 ifstat-1.1]# ps -ef |grep -v grep

root      10185  10145  7 19:30 pts/0    00:05:24 java com.study.gc.javaDemo02

 

(3)定位到具体线程或者代码

ps -mp 进程 -o THREAD,tid,time

[root@spark2 ifstat-1.1]# ps -mp 10185 -o THREAD,tid,time
USER     %CPU PRI SCNT WCHAN  USER SYSTEM    TID     TIME
root      7.0   -    - -         -      -      - 00:05:40
root      0.0  19    - futex_    -      -  10185 00:00:00
root      6.8  19    - -         -      -  10186 00:05:34
root      0.0  19    - futex_    -      -  10187 00:00:01
root      0.0  19    - futex_    -      -  10188 00:00:00
root      0.0  19    - futex_    -      -  10189 00:00:00
root      0.0  19    - futex_    -      -  10190 00:00:00
root      0.0  19    - futex_    -      -  10191 00:00:00
root      0.0  19    - futex_    -      -  10192 00:00:00
root      0.0  19    - futex_    -      -  10193 00:00:00
root      0.0  19    - futex_    -      -  10194 00:00:04
[root@spark2 ifstat-1.1]# 

参数解释

-m 显示所有线程
-p pid进程使用cpu的时间
-o 该参数后是用户自定义格式

(4)将需要的线程ID转换为16进制格式(英文小写格式)

cmd窗口执行“calc”切换计算机“程序员”

(5)jstack 进程ID | grep tid(16进制线程ID小写英文) -A60

[root@spark2 ifstat-1.1]# jstack 10185| grep 27C9 -A60
 
 
原文连接:https://zhuanlan.zhihu.com/p/166394360
 
posted on 2021-06-03 22:23  H__D  阅读(179)  评论(0编辑  收藏  举报