服务器内存使用率定位常用命令整理笔记
生产服务器问题描述
系统提醒服务器内存使用率过高,Swap交换区内存使用率过高,系统运行速度变慢存在高风险。
问题定位方法
内存使用情况查看
free命令: 显示系统可用内存以及已经使用的内存的信息
free #默认kb单位
free -m #Mb单位
free -h #Gb单位
内容分析:
total : 总计物理内存的大小
used : 已使用内存的大小
free : 空闲内存的大小
shared : 多个进程共享的内存总大小
buff/cache : 磁盘缓存大小(当内存不足时此部分内存会自动释放,内存足够时不会释放)
available : 可用内存大小 , 从应用程序的角度来说:available = free + buff/cache .
top命令: 查看进程信息,动态
top命令反应的是系统进程动态信息,默认10s更新一次。
top 命令详解,请参考http://www.jb51.net/article/40807.htm
基本命令:
按键盘数字“1”,可监控每个逻辑CPU的状况:
键盘“b”(打开/关闭加亮效果)
键盘“x”(打开/关闭排序列的加亮效果)
”shift + >”或”shift + <”可以向右或左改变排序列
敲击“f”键,编排基本视图中的显示字段
s,改变画面更新频率
l,关闭或开启第一部分第一行 top 信息的表示
t,关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示
m,关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示
top
内容分析:
PID:进程的ID
USER:进程所有者
PR:进程的优先级别,越小越优先被执行
NI:进程Nice值,代表这个进程的优先值
VIRT:进程占用的虚拟内存
RES:进程占用的物理内存
SHR:进程使用的共享内存
S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态
%CPU:进程占用CPU的使用
%MEM:进程使用的物理内存和总内存的百分
TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值
COMMAND:启动该进程的命令名称
通过查看内存占用率高的PID,查看相关进程
ps:查看进程信息,静态,即当前状态
常用命令:
ps -aux: 查看系统所有进程
ps -l: 进查看自己的bash相关进程
ps aux --sort -rss : 按照 rss 排序显示内容
ps aux --sort -rss |head -n 10: 按照 rss 排序显示前10进程内容
ps aux | grep [pid] : 查询指定pid进程的信息
查看Swap分区内存占用比较多的进程
for i in `cd /proc;ls | grep "^[0-9]" | awk ' $0 >100'`;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps;done 2>&1 | sort -k2nr | head
获取交换区内存使用比较多的PID,使用
ps aux | grep [pid]
查看具体的进程信息
如何释放swap内存
1,重启占用swap的进程
2,关闭swap分区(有时候并不能查看到哪些进程占用swap,则需要先关闭swap分区再开启)
==关闭swap分区注意事项和步骤==:
a,确保系统空闲内存大于swap已用内存
b,可以先清理内存cache,空出足够内存(echo "1" > /proc/sys/vm/drop_caches)
c,关闭swap分区(swapoff -a),这个过程需要等待
d,swap分区释放后,恢复swap分区(swapon -a)
e,恢复内存cache的设置(echo "0" > /proc/sys/vm/drop_caches)
补充其他查看内存信息命令
cat /proc/meminfo #查询内存详情
/proc/$pid/statm #查询pid内存信息
/proc/$pid/status #查询pid内存信息
vmstat -s
备注
开发主机为内网机,不方便截图,文章中涉及图片来源于其他文档,借用于下面链接:
https://www.jianshu.com/p/e9e0ce23a152