阅读 18

JB的测试之旅-Linux服务器很卡怎么办

前言

去年中旬,服务器就扔了个爬虫一直怕数据,直到最近才有空上服务器看看,结果,服务器超级卡,卡到什么程度?输一个ls等3秒,然后再等5s才能显示结果;

image.png-44.2kB

这肯定不能忍,那有啥办法可以排查下?

free

free 命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存,共享内存将被忽略;

如果free约少,说明内存被吃完了,就需要释放内存了;

参数

free 参数
如:free -m
复制代码

命令参数

参数 意义
-b 以Byte为单位显示内存使用情况;
-k 以KB为单位显示内存使用情况;
-m 以MB为单位显示内存使用情况;
-g 以GB为单位显示内存使用情况;
-o 不显示缓冲区调节列;
-s<间隔秒数> 持续观察内存使用状况;
-t 显示内存总和列;
-V 显示版本信息;

参数详解

image.png-23kB

参数 含义
total 总计物理内存的大小;
used 已使用多大;
free 可用有多少;
Shared 多个进程共享的内存总额;
Buffers/cached 磁盘缓存的大小;

内存清理

sync && echo 1 > /proc/sys/vm/drop_caches
复制代码

image.png-66.9kB

/proc/sys/vm/drop_caches中的默认值为0,

  • 值为1时表示可以释放pagecache缓存;
  • 值为2时可以释放pagecache和inode缓存;
  • 值为3时可以释放pagecache, dentries和inodes缓存;

top

top命令显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等;

命令参数

参数 意义
-b 批处理;
-c 显示完整的治命令;
-I 忽略失效过程;
-s 保密模式;
-S 累积模式;
-i<时间> 设置间隔时间;
-u<用户名> 指定用户名;
-p<进程号> 指定进程;
-n<次数> 循环显示的次数;

参数详解

直接输入top即可显示进程信息;

image.png-258.3kB

第一行,任务队列信息,当前时间、运行时间、负载情况; 第二行,任务进程,共有74个进程,运行的有2个,72个休眠; 第三行,CPU状态信息:

参数 含义
us 用户空间占用CPU的百分比;
sy 内核空间占用CPU的百分比;
ni 改变过优先级的进程占用CPU的百分比;
id 空闲CPU百分比;
wa IO等待占用CPU的百分比;
hi 硬中断(Hardware IRQ)占用CPU的百分比;
si 软中断(Software Interrupts)占用CPU的百分比;

第四行,内存状态:

参数 含义
total 物理内存总量;
used 使用中的内存总量;
free 空闲内存总量;
buffers 缓存的内存量;

第五行,swap交换分区信息:

参数 含义
total 交换区总量;
used 使用的交换区总量;
free 空闲交换区总量;
cached 缓冲的交换区总量;

第六行,各进程的状态监控:

参数 含义
PID 进程id;
USER 进程所有者;
PR 进程优先级;
NI nice值。负值表示高优先级,正值表示低优先级;
VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES;
RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA;
SHR 共享内存大小,单位kb;
S 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程;
%CP 上次更新到现在的CPU时间占用百分比;
%MEM 进程使用的物理内存百分比;
TIME+ 进程使用的CPU时间总计,单位1/100秒;
COMMAND 进程名称(命令名/命令行);

一般来说,想杀掉某个进程,直接kill pid即可;

做完这两步,服务器至少没那么卡了;

df

显示指定磁盘文件的可用空间;

一般来说,都是这么使用:df -h,-h是以方便阅读方式显示;

image.png-60.7kB

当发现磁盘使用率很高时,那就要释放磁盘空间了,删除一些不必要的文件;

iostat

查看CPU、网卡、tty设备、磁盘、CD-ROM 等等设备的活动情况, 负载信息;

命令参数

参数 含义
-C 显示CPU使用情况;
-d 显示磁盘使用情况;
-k 以 KB 为单位显示;
-m 以 M 为单位显示;
-N 显示磁盘阵列(LVM) 信息;
-n 显示NFS 使用情况;
-p[磁盘] 显示磁盘和分区的情况;
-t 显示终端和CPU的信息;
-x 显示详细信息;
-V 显示版本信息;

参数详解

iostat -x 1
显示详细信息,并且每秒刷新显示
复制代码

image.png-329.4kB

cpu属性值说明

参数 含义
%user CPU处在用户模式下的时间百分比;
%nice CPU处在带NICE值的用户模式下的时间百分比;
%system CPU处在系统模式下的时间百分比;
%iowait CPU等待输入输出完成时间的百分比;
%steal 管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比;
%idle CPU空闲时间百分比;

disk属性值说明:

参数 含义
rrqm/s 每秒进行 merge 的读操作数目;
wrqm/s 每秒进行 merge 的写操作数目;
r/s 每秒完成的读 I/O 设备次数;
w/s 每秒完成的写 I/O 设备次数;
rsec/s 每秒读扇区;
wsec/s 每秒写扇区数;
rkB/s 每秒读K字节数;
wkB/s 每秒写K字节数;
avgrq-sz 平均每次设备I/O操作的数据大小 (扇区);
avgqu-sz 平均I/O队列长度;
await 平均每次设备I/O操作的等待时间 (毫秒);
svctm 平均每次设备I/O操作的服务时间 (毫秒);
%util 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比;

备注:

如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。如果avgqu-sz比较大,也表示有当量io在等待;
复制代码

iotop

iotop是一个用来监视磁盘I/O使用状况的top类工具,跟top命令相似;

安装

#Ubuntu
apt-get install iotop

#centos
yum install iotop
复制代码

直接使用就能看到效果:

image.png-110.2kB

小结

是常用的一些命令,算是对基本功做一些补充,完;

关注下面的标签,发现更多相似文章
评论