嘘~ 正在从服务器偷取页面 . . .

Linux 必知必会(1)


Linux 必知必会

1、整理状态 TOP

查看整机状态

[root@centos ~]# top

执行结果(是动态的):

top - 23:05:50 up 103 days,  1:03,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 107 total,   1 running, 106 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.3 id,  0.3 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1016516 total,    66388 free,   338992 used,   611136 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   501404 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                              
  583 root      20   0  555744  11344    688 S  0.3  1.1  10:44.68 tuned                                                
    1 root      20   0  188548   2548   1320 S  0.0  0.3   7:45.21 systemd                                              
    2 root      20   0       0      0      0 S  0.0  0.0   0:01.41 kthreadd                                             
    3 root      20   0       0      0      0 S  0.0  0.0   1:38.48 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   6:39.63 rcu_sched                                            
   10 root      rt   0       0      0      0 S  0.0  0.0   0:28.19 watchdog/0                                           
   12 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs                                            
   13 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns                                                
   14 root      20   0       0      0      0 S  0.0  0.0   0:01.53 khungtaskd                                           
   15 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 writeback                                            
   16 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kintegrityd                                          
   17 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset                                               
   18 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kblockd                                              
   19 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 md                                                   
   25 root      20   0       0      0      0 S  0.0  0.0   0:20.30 kswapd0                                              
   26 root      25   5       0      0      0 S  0.0  0.0   0:00.00 ksmd                                                 
   27 root      39  19       0      0      0 S  0.0  0.0   0:25.36 khugepaged                                           
   28 root      20   0       0      0      0 S  0.0  0.0   0:00.00 fsnotify_mark                                        
   29 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 crypto                                               
   37 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kthrotld                                             
   39 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kmpath_rdacd                                         
   40 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kpsmoused                                            
   41 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                                              
  104 root      20   0       0      0      0 S  0.0  0.0   0:15.53 kauditd

第一行,任务队列信息,同 uptime 命令的执行结果

系统时间:23:05:50

运行时间:up 103 days,

当前登录用户: 1 user

负载均衡: load average: 0.00, 0.01, 0.05

average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。

load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了

第二行,Tasks — 任务(进程)

​ 107 total, 1 running, 106 sleeping, 0 stopped, 0 zombie

总进程:107 total, 运行:1 running, 休眠:106 sleeping, 停止: 0 stopped, 僵尸进程: 0 zombie

第三行,cpu状态信息

按键盘数字1会展开具体CPU核数。

0.0 us, 0.3 sy, 0.0 ni, 99.3 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st

0.0%us【user space】— 用户空间占用CPU的百分比。

0.3%sy【sysctl】— 内核空间占用CPU的百分比。

0.0%ni【】— 改变过优先级的进程占用CPU的百分比

99.3%id【idolt】— 空闲CPU百分比

0.3%wa【wait】— IO等待占用CPU的百分比

0.0%hi【Hardware IRQ】— 硬中断占用CPU的百分比

0.0%si【Software Interrupts】— 软中断占用CPU的百分比

0.0%st 实时中断CPU的百分比

第四行,内存状态

KiB Mem : 1016516 total, 66388 free, 338992 used, 611136 buff/cache

​ 1016516 total, 66388 k free, 338992 k used, 611136 k buffers【缓存的内存量】

第五行,swap交换分区信息

KiB Swap: 0 total, 0 free, 0 used. 501404 avail Mem

​ 0k total, 0k free, 0k used, 501404 k cached【缓冲的交换区总量】

备注:

可用内存=free + buffer + cached

对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。

第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,

第四行中空闲内存总量(free)是内核还未纳入其管控范围的数量。

纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。

2、CPU状态 vmstat

vmstat -n 3  5

运行结果:

[root@centos ~]# vmstat -n 3 5
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  76036 108356 490940    0    0     7    29    1    4  0  0 99  0  0
 0  0      0  76036 108356 490940    0    0     0   137  135  211  0  0 100  0  0
 0  0      0  75684 108356 490960    0    0     0    16  133  274  1  0 99  0  0
 0  0      0  75684 108356 490964    0    0     0     0  111  235  0  0 100  0  0
 0  0      0  75716 108356 490964    0    0     0    25  132  282  1  1 99  0  0

vmstat -n 3 5 第一个参数表示采样的世界间隔数单位是秒,第二个参数是采样的次数。

表示每3秒采样5次。

结果解读:

  • procs

    • r:运行和等待CPU时间片的进程数,原则上1核的CPU的运行队列不要超过2,整个系统的运行队列不能超过总核数的2倍,否则代表系统压力过大。
    • b:等待资源的进程数,比如正在等待磁盘I/O、网络I/O等。
  • CPU

    • us:用户进程消耗CPU时间百分比,us值高,用户进程消耗CPU时间多,如果长期大于50%,优化程序;
    • sy:内核进程消耗的CPU时间百分比;
    • id:空闲时间(包括IO等待时间),中央处理器的空闲时间 。以百分比表示。 低于60%,开始有压力了。
    • wa:等待IO时间。
  • memory

    • swpd:使用虚拟内存大小 。
    • free:可用内存大小 。
    • buff:用作缓冲的内存大小 。
    • cache:用作缓存的内存大小。
  • Swap:

    • si: 每秒从交换区写到内存的大小。
    • so: 每秒写入交换区的内存大小。
  • IO:(现在的Linux版本块的大小为1024bytes)

    • bi: 每秒读取的块数 。
    • bo: 每秒写入的块数 。bi,bo长期不等于0,表示IO压力较大。
  • 系统:

    • in: 每秒中断数,包括时钟中断。【interrupt】
    • cs: 每秒上下文切换数。 【count/second】

其他参数:

# -a 活跃和非活跃的都显示,信息来自/proc/stat中的processes字段
vmstat -a 3 5 

# -s 查看内存使用详细情况,信息的分别来自于/proc/meminfo,/proc/stat和/proc/vmstat 
vmstat -s

# -d 查看磁盘读写情况,信息来自于/proc/diskstats. 
vmstat -d

# -p 查看指定分区的磁盘读写情况,信息来自于/proc/diskstats
vmstat -p  /dev/sda1

# -m 查看系统slab信息,信息来自于/proc/slabinfo
vmstat -m

其他命令:

查看所有cpu核信息:

mpstat -P ALL 2

进程使用cpu的用量分解信息

pidstat -u 1 -p  进程编号

3、内存 free

free -m # 以Mb为单位查看
free -g # 以Gb为单位查看

应用可用内存/系统物理内存 < 20% ,需要增加内存。

pidstat -p  进程编号   -r  采样隔间频率(秒)

4、硬盘 df

df -h

示例:

[root@centos ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        50G  8.8G   38G  19% /
devtmpfs        487M     0  487M   0% /dev
tmpfs           497M   24K  497M   1% /dev/shm
tmpfs           497M  316K  497M   1% /run
tmpfs           497M     0  497M   0% /sys/fs/cgroup
tmpfs           100M     0  100M   0% /run/user/0

5、磁盘 io

iostat -xdk 2 3

如果出现-bash: xxxstat: command not found,可用先安装系统性能监控工具:

[root@centos ~]# yum install sysstat
[root@centos ~]# iostat -xdk 2 1
Linux 3.10.0-514.26.2.el7.x86_64 (VM_0_13_centos)       11/06/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
vda               0.00     2.89    0.19    3.22     6.67    29.04    20.93     0.03    7.40    5.49    7.51   0.47   0.16
scd0              0.00     0.00    0.00    0.00     0.00     0.00    11.12     0.00    0.35    0.35    0.00   0.33   0.00

磁盘块设备分布:

rkB/s 每秒读取数据量 kB;

wkB/s 每秒写入数据量 kB;

svctm :I/O请求的平均服务时间,单位毫秒;

await:I/O请求的平均等待时间,单位毫秒;值越小,性能越好。

util :一秒中百分之几的使用用于IO操作。接近100%时,表示磁盘带宽跑满,需要优化程序或增加磁盘。

rkB/s、wkB/s 根据系统应用不同会有不同的值,但有规律遵循;长期、超大数据量读写一般认为不正常。

svctm 和 await 二者的值很接近,表示几乎没有I/O等待,磁盘性能好,如果await 的值高于 svctm 的值,则表示I/O队列等待太长,需要优化程序或更换磁盘。

也可以使用pidstat

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

6、网络 io

ifstat

ifstat 用于报告接口状态,是一个网络流量监测程序。该命令需要手动安装。

ifstat官网: http://gael.roualland.free.fr/ifstat/

wget http://gael.roualland.free.fr/ifstat/ifstat-1.1.tar.gz
tar-zxvf ifstat-1.1.tar.gz 
cd ifstat-1.1
./configure  # 默认会安装到/usr/local/bin/目录中
make
make  install 

常用参数:

-p优化打印
-a忽略历史记录
-e显示错误信息
-r重置历史记录

类似的流量监控还有:

iftop

安装依赖:

CentOS上安装所需依赖包:

yum install flex byacc  libpcap ncurses ncurses-devel libpcap-devel

Debian上安装所需依赖包:

apt-get install flex byacc  libpcap0.8 libncurses5

下载安装包并编译安装:

wget http://www.ex-parrot.com/pdw/iftop/download/iftop-0.17.tar.gz

tar zxvf iftop-0.17.tar.gz

cd iftop-0.17

./configure

make && make install

常用参数:

iftop -i eth1 #设定监测的网卡,

iftop -B # 以bytes为单位显示流量(默认是bits),

iftop -n # 使host信息默认直接都显示IP,

iftop -N # 使端口信息默认直接都显示端口号

#-F显示特定网段的进出流量
iftop -F 10.10.1.0/24
iftop -F 10.10.1.0/255.255.255.0

iftop -h # 帮助,显示参数信息

iftop -p # 使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;

iftop -b # 使流量图形条默认就显示;

iftop -f # 这个暂时还不太会用,过滤计算包用的;

iftop -P # 使host信息及端口信息默认就都显示;

iftop -m 100M # 设置界面最上边的刻度的最大值,刻度分五个大段显示

执行结果界面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。中间的<= =>这两个左右箭头,表示的是流量的方向。

  • TX:发送流量
  • RX:接收流量
  • TOTAL:总流量
  • Cumm:运行iftop到目前时间的总流量
  • peak:流量峰值
  • rates:分别表示过去 2s 10s 40s 的平均流量

进入iftop画面后的一些操作命令(注意大小写)

按 h 切换是否显示帮助;

按 n 切换显示本机的IP或主机名;

按 s 切换是否显示本机的host信息;

按 d 切换是否显示远端目标主机的host信息;

按 t 切换显示格式为2行/1行/只显示发送流量/只显示接收流量;

按 N 切换显示端口号或端口服务名称;

按 S 切换是否显示本机的端口信息;

按 D 切换是否显示远端目标主机的端口信息;

按 p 切换是否显示端口信息;

按 P 切换暂停/继续显示;

按 b 切换是否显示平均流量图形条;

按 B 切换计算2秒或10秒或40秒内的平均流量;

按 T 切换是否显示每个连接的总流量;

按 l 打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;

按 L 切换显示画面上边的刻度;刻度不同,流量图形条会有变化;

按 j 或按k可以向上或向下滚动屏幕显示的连接记录;

按 1 或 2 或 3 可以根据右侧显示的三列流量数据进行排序;

按 < 根据左边的本机名或IP排序;

按 > 根据远端目标主机的主机名或IP排序;

按 o 切换是否固定只显示当前的连接;

按 ! 可以使用shell命令

按 q 退出监控。

7、CPU高占用定位

(1)使用top命令找到cpu使用率最高的进程编号

(2)使用ps -efjps进一步定位后台程序

ps -ef |grep java | grep -v grep
jsp -l

(3)定位到具体线程

ps -mp 进行编号  -o  THREAD,TID,TIME

找到CPU占用最高的线程对应线程编号TID

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

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

再执行jstack命令:

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

-A60 : 打印前60行

比如:进行ID为 10234,则对应的16进制为:27fa

可以借助 在线进制转换工具 快速确定。

执行:

jstack 10234 | grep  27fa  -A60

本文整理参考以下内容,后续增加内容再补充。

B站阳哥视频原视频地址

Linux 命令手册 或者 命令查询网址

Linux流量监控工具 - iftop (最全面的iftop教程)



文章作者: Small-Rose /张小菜
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-SA 4.0 许可协议。转载请注明来源 Small-Rose /张小菜 !
评论
  目录