前言
去年中旬,服务器就扔了个爬虫一直怕数据,直到最近才有空上服务器看看,结果,服务器超级卡,卡到什么程度?输一个ls等3秒,然后再等5s才能显示结果;
这肯定不能忍,那有啥办法可以排查下?
free
free 命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存,共享内存将被忽略;
如果free约少,说明内存被吃完了,就需要释放内存了;
参数
free 参数
如:free -m
命令参数
| 参数 | 意义 |
|---|---|
| -b | 以Byte为单位显示内存使用情况; |
| -k | 以KB为单位显示内存使用情况; |
| -m | 以MB为单位显示内存使用情况; |
| -g | 以GB为单位显示内存使用情况; |
| -o | 不显示缓冲区调节列; |
| -s<间隔秒数> | 持续观察内存使用状况; |
| -t | 显示内存总和列; |
| -V | 显示版本信息; |
参数详解
| 参数 | 含义 |
|---|---|
| total | 总计物理内存的大小; |
| used | 已使用多大; |
| free | 可用有多少; |
| Shared | 多个进程共享的内存总额; |
| Buffers/cached | 磁盘缓存的大小; |
内存清理
sync && echo 1 > /proc/sys/vm/drop_caches
/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即可显示进程信息;
第一行,任务队列信息,当前时间、运行时间、负载情况; 第二行,任务进程,共有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是以方便阅读方式显示;
当发现磁盘使用率很高时,那就要释放磁盘空间了,删除一些不必要的文件;
iostat
查看CPU、网卡、tty设备、磁盘、CD-ROM 等等设备的活动情况, 负载信息;
命令参数
| 参数 | 含义 |
|---|---|
| -C | 显示CPU使用情况; |
| -d | 显示磁盘使用情况; |
| -k | 以 KB 为单位显示; |
| -m | 以 M 为单位显示; |
| -N | 显示磁盘阵列(LVM) 信息; |
| -n | 显示NFS 使用情况; |
| -p[磁盘] | 显示磁盘和分区的情况; |
| -t | 显示终端和CPU的信息; |
| -x | 显示详细信息; |
| -V | 显示版本信息; |
参数详解
iostat -x 1
显示详细信息,并且每秒刷新显示
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
直接使用就能看到效果:
小结
是常用的一些命令,算是对基本功做一些补充,完;