Linux下相关性能指标数据采集

 

1)如何查看某个服务进程所占本机物理内存及百分比情况?可以使用Linux命令行查看,也可以使用脚本实现。如下以查看本机kube-nginx服务进程为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
[root@kevin ~]# pidof kube-nginx                
4763 4762
  
查看上面两个pid的物理内存使用情况
[root@kevin ~]# cat /proc/4763/status | grep VmRSS   
VmRSS:      4596 kB
[root@kevin ~]# cat /proc/4762/status|grep VmRSS
VmRSS:       224 kB
 
由上面可知,kube-nginx服务进程的两个pid所占物理内存为"4596+224=4820k"
  
编写python脚本
[root@kevin ~]# cat mem_percent.py
#!/usr/bin/python
#coding=utf8
import subprocess
pidcheck = subprocess.Popen('pidof kube-nginx',shell=True,stdout=subprocess.PIPE)
pid = pidcheck.stdout.read().rstrip().split()
memsize = 0
for i in pid:
   filename = "/proc/"+i+"/status"
   #os.path.join("/proc","i","status")     #等同于上条语句
   with open(filename,"r") as statusfile:
       for line in statusfile:
           if line.startswith("VmRSS"):
               memsize+=int(line.split()[1])
print "kube-nginx进程占用内存:%sk" % memsize
  
with open("/proc/meminfo","r") as memfile:
   for line in memfile:
       if line.startswith("MemTotal"):
           memtotal = int(line.split()[1])
print "kube-nginx进程内存占用率为:%.2f%%" % (memsize/float(memtotal)*100)
  
执行脚本:
[root@kevin ~]# chmod 755 mem_percent.py
  
[root@kevin ~]# ./mem_percent.py
kube-nginx进程占用内存:4820k
kube-nginx进程内存占用率为:0.06%
  
[root@kevin ~]# python ./mem_percent.py
kube-nginx进程占用内存:4820k
kube-nginx进程内存占用率为:0.06%
  
  
================================================================================================================
再看一例: 查看docked服务进程所占物理内存情况
[root@kevin ~]# pidof dockerd       
29496
[root@kevin ~]# cat /proc/29496/status|grep VmRSS
VmRSS:     78288 kB
  
[root@kevin ~]# cat mem1_percent.py
#!/usr/bin/python
#coding=utf8
import subprocess
pidcheck = subprocess.Popen('pidof dockerd',shell=True,stdout=subprocess.PIPE)
pid = pidcheck.stdout.read().rstrip().split()
memsize = 0
for i in pid:
   filename = "/proc/"+i+"/status"
   #os.path.join("/proc","i","status")     #等同于上条语句
   with open(filename,"r") as statusfile:
       for line in statusfile:
           if line.startswith("VmRSS"):
               memsize+=int(line.split()[1])
print "dockerd进程占用内存:%sk" % memsize
  
with open("/proc/meminfo","r") as memfile:
   for line in memfile:
       if line.startswith("MemTotal"):
           memtotal = int(line.split()[1])
print "dockerd进程内存占用率为:%.2f%%" % (memsize/float(memtotal)*100)
  
[root@kevin ~]# python mem1_percent.py
dockerd进程占用内存:78288k
dockerd进程内存占用率为:0.96%

2)使用Linux命令行直接某个进程的CPU百分比和内存百分比

1
2
3
4
5
6
7
8
9
10
11
12
13
14
使用"ps auxw" 可以查看到本机的进程所占cpu和mem的百分比情况
[root@m7-autocv-gpu02 ~]# ps auxw|head -1
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
 
%CPU 进程的cpu占用率
%MEM 进程的内存占用率
 
查看java进程所占本机的cpu百分比, 如下为0.3%
[root@m7-autocv-gpu02 ~]# ps auxw |grep -v grep|grep -w java|awk '{print $3}'          
0.3
 
查看java进程所占本机的内存百分比, 如下为18.0%  (这个值跟上面python脚本查出来的18.05%稍微有点误差,这里百分比的数只精确到小数点后一位)
[root@m7-autocv-gpu02 ~]# ps auxw |grep -v grep|grep -w java|awk '{print $4}'
18.0

Linux下查看哪些进程占用的CPU和内存资源最多的方法

1
2
3
4
5
6
7
8
9
10
11
1)获取占用CPU资源最多的10个进程
[root@kevin ~]# ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head -10
 
2)获取占用内存资源最多的10个进程
[root@kevin ~]# ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head -10
 
3)查看占用cpu最高的进程
[root@kevin ~]# ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head -1
 
4)获取占用内存资源最高的进程
[root@kevin ~]# ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head -1

3)Linux下查看某些进程的启动时间和运行时长

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
比如查看java进程的启动时间和运行时长
[root@m7-autocv-gpu02 ~]# ps -ef|grep -v grep|grep -w java|awk '{print $2}'
18661
 
[root@m7-autocv-gpu02 ~]# ps -eo pid,lstart,etime | grep 18661            
18661 Tue May 14 19:22:51 2019  5-19:42:51
 
其中:
Tue May 14 19:22:51 2019   为java进程的启动时间
5-19:42:51                 为java进程的运行时长,即5天19小时42分51秒
 
 
可以查看所有进程的启动事件、运行时长
[root@m7-autocv-gpu02 ~]# ps -eo user,pid,lstart,etime,cmd
 
查看nginx进程启动的精确时间和启动后运行的时长
[root@m7-autocv-gpu02 ~]# ps -eo pid,lstart,etime,cmd|grep nginx

4)Linux下查看某个进程的TIME_WAIT、ESTABLISHED、FIN_WAIT2 连接数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
查看总的TIME_WAIT、ESTABLISHED、FIN_WAIT2 连接数 (下面两个命令都可以)
[root@kevin ~]# netstat -ae|grep "TIME_WAIT" |wc -l
[root@kevin ~]# ss -a|grep "TIME_WAIT" |wc -l
 
[root@kevin ~]# netstat -ae|grep "ESTABLISHED" |wc -l
[root@kevin ~]# netstat -ae|grep "FIN_WAIT2" |wc -l
 
  
比如查看kube-apiserve进程的TIME_WAIT、ESTABLISHED、FIN_WAIT2 连接数
[root@kevin ~]# netstat -antp | grep kube-apiserve | grep ESTABLISHED  -c4
85
[root@kevin ~]# netstat -antp | grep kube-apiserve | grep TIME_WAIT -c4  
0
[root@kevin ~]# netstat -antp | grep kube-apiserve | grep ESTABLISHED -c4
85
[root@kevin ~]# netstat -antp | grep kube-apiserve | grep FIN_WAIT2 -c4 
0
 
 
还可以根据某一个进程的端口号来查看
[root@kevin ~]# netstat -antp | grep 6443 | grep TIME_WAIT -c4          
0
[root@kevin ~]# netstat -antp | grep 6443 | grep ESTABLISHED -c4               #即ESTABLISHED连接数为8
8
[root@kevin ~]# netstat -antp | grep 6443 | grep FIN_WAIT2 -c4          
0
 
====================================================================================
Linux下查看并发连接数
 
[root@kevin ~]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
ESTABLISHED 218
 
或者可以简单的直接用:
[root@kevin ~]# netstat -n|grep "ESTABLISHED"|wc -l
218
 
解释:
/^tcp/    :表示搜索以tcp开头的行
S[$NF]    :表示以$NF为数组下标,建立数组S
++S[$NF]  :表示给数组S赋值,相当于有一个tcp那么这个S数组里的元素就+1
/^tcp/ {++S[$NF]}   :表示整个意思应该是 匹配出一个tcp协议的连接 数组S就+一个元素值
END是前面的/^tcp/ {++S[$NF]}  :表示执行结束后在执行
{for(a in S) print a, S[a]}   :表示将S值代入a 打印a 和这个S[a]数组的值。比如S是10,那么a就是10,S[a] 就是s这个数组的第10个元素的值
 
 
返回结果示例:
LAST_ACK 5
SYN_RECV 30
ESTABLISHED 1597
FIN_WAIT1 51
FIN_WAIT2 504
TIME_WAIT 1057
其中的SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕,等待超时结束的请求数。
 
状态:描述
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉
 
例子
查看Nginx运行进程数
[root@kevin ~]# ps -ef | grep nginx | wc -l      #返回的数字就是nginx的运行进程数
 
查看Web服务器进程连接数:
[root@kevin ~]# netstat -antp | grep 80 | grep ESTABLISHED -c4
 
查看MySQL和java进程连接数:
[root@kevin ~]# ps -axef | grep mysqld -c
1
[root@kevin ~]# ps -axef | grep java -c
3
 
注意:
grep -c 的作用类似grep | wc -l,不同的是,如果是查找多个文件,grep -c会统计每个文件匹配的行数,每行一个文件的列出来,
wc -l 则列出总的统计数字。
另外grep -c 要比 grep | wc -l快一点。
 
 
====================================================================================
针对TIME_WAIT现象的优化措施:
  
比如某一天下午,登陆IDC机房的一台服务器,输入命令"netstat -an|grep mysql"
发现mysql服务进程存在大量TIME_WAIT状态的连接
[root@kevin ~]# netstat -an|grep mysql
...........
tcp        0      0 127.0.0.1:3306              127.0.0.1:41378             TIME_WAIT
tcp        0      0 127.0.0.1:3306              127.0.0.1:41379             TIME_WAIT
tcp        0      0 127.0.0.1:3306              127.0.0.1:39352             TIME_WAIT
tcp        0      0 127.0.0.1:3306              127.0.0.1:39350             TIME_WAIT
tcp        0      0 127.0.0.1:3306              127.0.0.1:35763             TIME_WAIT
tcp        0      0 127.0.0.1:3306              127.0.0.1:39372             TIME_WAIT
tcp        0      0 127.0.0.1:3306              127.0.0.1:39373             TIME_WAIT
tcp        0      0 127.0.0.1:3306              127.0.0.1:41176             TIME_WAIT
...........
  
通过调整内核参数解决, 编辑文件,加入以下内容:
[root@kevin ~]# vim /etc/sysctl.conf
...........
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
   
然后让添加的参数生效。
[root@kevin ~]# /sbin/sysctl -p
  
其中:
net.ipv4.tcp_syncookies = 1  表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1    表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1  表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout=30  表示修改系統默认的TIMEOUT时间为30秒
  
修改之后,再用命令查看TIME_WAIT连接数
[root@kevin ~]# netstat -ae|grep "TIME_WAIT" |wc –l
  
此时发现大量的TIME_WAIT 已不存在,mysql进程的占用率很快就降下来的,网站访问正常。
不过很多时候,出现大量的TIME_WAIT状态的连接,往往是因为网站程序代码中没有使用mysql.colse(),才导致大量的mysql  TIME_WAIT.

5) 查看本机所有进程的CPU和内存使用率之和

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
查看本机所有进程的CPU占比之和
[root@kevin ~]# cat cpu_per.sh
#!/bin/bash
 
ps auxw|awk '{if (NR>1){print $3}}' > /opt/cpu_list
 
awk '{CPU_PER+=$1}END{print CPU_PER}'  /opt/cpu_list
 
执行脚本,获取所有进程的cpu占比之和,即14.1%
[root@kevin ~]# sh cpu_per.sh
14.1
 
==========================================================
查看本机所有进程的内存占比之和
[root@kevin ~]# cat mem_per.sh
#!/bin/bash
 
ps auxw|awk '{if (NR>1){print $4}}' > /opt/mem_list
 
awk '{MEM_PER+=$1}END{print MEM_PER}'  /opt/mem_list
 
执行脚本,获取所有进程的内存占比之和,即22.2%
[root@kevin ~]# sh mem_per.sh
22.2
 
 
脚本配置解释:
ps -auxw|awk '{print $3}'   表示列出本机所有进程的cpu利用率情况,结果中第一行带"%CPU"字符
ps -auxw|awk '{print $4}'   表示列出本机所有进程的内存利用率情况,结果中第一行带"%MEM"字符
ps auxw|awk '{if (NR>1){print $4}}  表示将"ps auxw"结果中的第一行过滤(NR>1)掉,然后打印第4行

6)其他系统性能指标采集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
1)通过free命令查看内存剩余可用情况
==================================================================================
-b:以Byte为单位显示内存使用情况。
-k:以KB为单位显示内存使用情况。
-m:以MB为单位显示内存使用情况。
-g   以GB为单位显示内存使用情况。
-o:不显示缓冲区调节列。
-s<间隔秒数>:持续观察内存使用状况。
-t:显示内存总和列。
-V:显示版本信息。
-h:centos7系统下,可以使用该参数进行查看
 
[root@kevin ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3774        1155         591         291        2027        1962
Swap:          2048         901        1147
 
页面显示参数解释:
total: 总计物理内存的大小。
used: 已使用多大。
free: 可用有多少。
Shared: 多个进程共享的内存总额。
Buffers/cached: 磁盘缓存的大小
Swap:交换分区(虚拟内存)情况;
Mem:实际内存的使用情况
 
2)查看和设置服务器最大进程数
==================================================================================
查看系统允许的当前最大进程数
查看本服务器进程数
[root@kevin ~]# ps -eLf | wc -l
263
 
主要是看pid_max指标的值,pid_max是Linux内核用来限制进程数的一个最大指标。
换言之,即最大允许进程就这么多,超过了这个设定值,服务器就挂了("ps -eLf | wc -l"查看本机器的进程数)
[root@kevin ~]# sysctl kernel.pid_max    # centos7系统执行"systemctl kernel.pid_max"命令
kernel.pid_max = 32768
或者
[root@kevin ~]# cat /proc/sys/kernel/pid_max
32768
 
一般出现 -bash: fork: Cannot allocate memory 本机的进程数应该接近或等于pid_max指标值的。
[root@kevin ~]# echo 65536 > /proc/sys/kernel/pid_max                   # 临时修改
[root@kevin ~]# echo "kernel.pid_max=65536" >> /etc/sysctl.conf         # 永久修改
[root@kevin ~]# sysctl -p
kernel.pid_max = 65536
 
如上设置就可以了,保险起见,最好找到占用空间最大的进程,然后把它干掉就解决了!如下使用top命令分析:
 
3)top:展示进程视图,监控服务器进程数值默认进入top时,各进程是按照CPU的占用量来排序的
==================================================================================
[root@kevin ~]# top
top - 15:46:45 up 581 days, 22:30,  5 users,  load average: 0.00, 0.02, 0.05
Tasks: 133 total,   2 running, 130 sleeping,   1 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  7994044 total,  1227680 free,  3499004 used,  3267360 buff/cache
KiB Swap:  2097148 total,  1708072 free,   389076 used.  3954372 avail Mem
 
   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                    
 48085 root      20   0 4172780 814536   6236 S   0.7 21.1   8353:58 mongod                                                                     
 12670 root      20   0  703816  41532    924 S   0.3  1.1 331:29.13 glusterfs                                                                  
 55185 root      20   0  157724   2240   1548 R   0.3  0.1   0:00.03 top                                                                        
     1 root      20   0   51656   2496   1352 S   0.0  0.1  94:14.96 systemd                                                                    
     2 root      20   0       0      0      0 S   0.0  0.0   0:01.87 kthreadd                                                                   
     3 root      20   0       0      0      0 S   0.0  0.0   2:32.08 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   1:16.86 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 R   0.0  0.0 358:31.04 rcu_sched                                                                  
    10 root      rt   0       0      0      0 S   0.0  0.0   5:39.75 watchdog/0                                                                 
    11 root      rt   0       0      0      0 S   0.0  0.0   4:54.62 watchdog/1                                                                 
    12 root      rt   0       0      0      0 S   0.0  0.0   1:17.38 migration/1                                                                
    13 root      20   0       0      0      0 S   0.0  0.0   2:26.26 ksoftirqd/1                                                                
    15 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0H                                                               
    17 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kdevtmpfs                                                                  
    18 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 netns                                                                      
    19 root      20   0       0      0      0 S   0.0  0.0   0:26.52 khungtaskd                                                                 
    20 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 writeback    
 
针对以上的top命令显示的结果,逐行说明:
 
第一行:
15:46:45 — 当前系统时间
581 days, 22:30 — 系统已经运行了581天22小时30分钟(在这期间没有重启过)
5 users — 当前有5个用户登录系统
lload average: 0.00, 0.02, 0.05 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况
 
这里需要注意:
load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。
如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。
 
第二行:
Tasks — 任务(进程),系统现在共有133个进程,其中处于运行中的有2个,130个在休眠(sleep),stoped状态的有1个,zombie状态(僵尸)的有0个。
 
第三行:cpu状态
0.3% us — 用户空间占用CPU的百分比。
0.3% sy — 内核空间占用CPU的百分比。
0.0% ni — 改变过优先级的进程占用CPU的百分比
99.3% id — 空闲CPU百分比
0.0% wa — IO等待占用CPU的百分比
0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比
0.0% si — 软中断(Software Interrupts)占用CPU的百分比
0.0% st — 虚拟机偷取占用CPU的百分比
 
第四行:内存状态(k)
7994044 total — 物理内存总量(8GB)
1227680 free — 使用中的内存总量(12.2GB)
3499004 used — 空闲内存总量(350M)
3267360 buff/cache — 缓存的内存量 (326M)
 
第五行:swap交换分区(k)
2097148 tota — 交换区总量(2GB)
1708072 free — 空闲交换区总量(1.7G)
389076 used — 使用的交换区总量(390M)
3954372 avail Mem — 目前可用的内存总量(4GB)。剩余内存+剩余的swap内存
 
第六行以下:各进程(任务)的状态监控
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100
COMMAND — 进程名称(命令名/命令行)
 
-------------------------------------
扩展:top命令的多U多核CPU监控
1. 在top基本视图中,按键盘数字"1",可监控每个逻辑CPU的状况:
top - 18:04:41 up 85 days,  3:25,  3 users,  load average: 0.11, 0.13, 0.13
Tasks: 128 total,   2 running, 126 sleeping,   0 stopped,   0 zombie
%Cpu0  :  2.0 us,  0.7 sy,  0.0 ni, 97.0 id,  0.3 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  2.7 us,  0.7 sy,  0.0 ni, 96.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  3.7 us,  0.0 sy,  0.0 ni, 96.0 id,  0.0 wa,  0.0 hi,  0.3 si,  0.0 st
%Cpu3  :  2.3 us,  0.3 sy,  0.0 ni, 97.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  7994044 total,  1179668 free,  3552276 used,  3262100 buff/cache
KiB Swap:  2097148 total,  1708072 free,   389076 used.  3900944 avail Mem
.......
.......
 
2. 敲击键盘"b", 可以"打开/关闭"top视图的加亮效果。
3. 敲击键盘"x", 可以"打开/关闭"top视图的排序列的加亮效果。
4. 如果要在基本视图中显示"CODE""DATA"两个字段,可以通过敲击"r""s"键。
 
4)Linux查看进程、CPU、内存、IO相关信息
==================================================================================
1. 监控java线程数:
# ps -eLf | grep java | wc -l
 
2. 监控网络客户连接数:
# netstat -n | grep tcp | grep 侦听端口 | wc -l
 
3. 进程相关
# cat /proc/your_PID/status 
通过"top""ps -ef |grep '进程名'" 得到进程的PID。然后执行上面命令可以提供进程状态、文件句柄数、内存使用情况等信息。
 
4. 内存相关
# vmstat -s -S M 
该可以查看包含内存每个项目的报告,通过-S M或-S k可以指定查看的单位,默认为kb。结合watch命令就可以看到动态变化的报告了。
也可用  cat /proc/meminfo 
 
5. 查看cpu的配置信息
# cat /proc/cpuinfo 
它能显示诸如CPU核心数,时钟频率、CPU型号等信息。
 
6. 要查看cpu波动情况的,尤其是多核机器上,可以使用下面命令:
# mpstat -P ALL 10
该命令可间隔10秒钟采样一次CPU的使用情况,每个核的情况都会显示出来,例如,每个核的idle情况等。
 
如果只是需查查看看均值的CPU,可以使用下面命令:
# iostat -c
 
7. IO相关
# iostat -P ALL 
该命令可查看所有设备使用率、读写字节数等信息。
 
5)Linux查看物理CPU个数、核数、逻辑CPU个数
==================================================================================
总核数 = 物理CPU个数 * 每颗物理CPU的核数
总逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数
 
1. 查看物理CPU个数
# cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
 
2. 查看每个物理CPU中core的个数(即核数)
# cat /proc/cpuinfo| grep "cpu cores"| uniq
 
3. 查看逻辑CPU的个数
# cat /proc/cpuinfo| grep "processor"| wc -l
 
4. 查看CPU信息(型号)
# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
posted @   散尽浮华  阅读(53390)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
点击右上角即可分享
微信分享提示