服务器CPU或内存是否不足?
一、自查:
(1)SSH登录服务器,通过top命令查看系统负载情况
重点关注top命令输出信息中的如下内容:
第三行:CPU统计信息
us 用户使用cpu占比
sy 系统使用cpu占比
ni 用户空间内改变过优先级的进程占用CPU百分比
id 空闲cpu占比
wa 等待输入输出CPU时间百分比
hi CPU服务于硬件中断所耗费的时间总额
si CPU服务软中断所耗费的时间总额
st Steal Time
第四行:内存统计信息
total 物理内存总量
free 剩余的物理内存
used 已使用的物理内存
buff/cache 缓冲区内存(buff用于块设备数据缓冲,记录文件系统metadata,如目录,权限,属性等;cache用于文件内容缓冲)
第六行之后的各行进程统计信息
PID 进程PID
USER 进程所有者
PR 优先级
NI nice值,负值表示高优先级,正值表示低优先级
VIRT 进程使用的虚拟内存总量,VIRT=SWAP+RES
RES 进程使用的、未被换出的物理内存大小
SHR 共享内存大小
S 进程状态,D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU 上次更新到现在的CPU时间占用百分比
%MEM 进程使用的物理内存百分比
TIME+ 进程使用CPU总时间
COMMAND 命令名、命令行
2) 通过free命令查看内存情况
free命令输出的信息包括,
total: 内存总容量
used: 已经使用内存
free: 完全空闲内存
shared: 多个进程共享的内存
buff/cache: 缓冲内存
available:真正剩余的可被程序应用的内存
如果CPU整体使用率或内存整体使用率超过80%,或有单个进程CPU或内存使用率超过整体的50%,均需要重点关注。
二、剖析
(1) CPU占用率高,一般的原因有:
Java进程JVM参数配置较低:Java进程配置的堆内存不足时,可能会因不断触发GC导致CPU占用率高
服务器CPU配置过低:当前服务器CPU核数过少或主频较低,无法承载现有的业务
程序性能问题:程序存在性能瓶颈导致CPU占用率高(易发于sql慢查询)
机器中毒:如发现有某个进程的CPU整体占用率接近100%,需考虑机器中毒的可能性(多发于挖坑病毒)
(2) 内存占用率高,一般的原因有:
内存分配不当:给个别程序分配了过多的内存
高频IO:程序中有高频的读写操作,导致buff/cache 变高(尤其是存在大文件读写时)
服务器内存配置过低:当前服务器内存配置较低,无法承载现有的业务
程序性能问题:程序存在性能瓶颈导致内存占用率高
三、应对
找到占用CPU或内存过高的进程后,可联系研发进一步排查解决。
指导原则如下:
程序配置问题,则修改为合适的配置
机器配置不足,则联系客户升级服务器配置
性能问题,短期内能解决的,则由研发尽快修复性能问题;短期内无法解决的,与研发/客户商定升配或分布式部署方案
转载请注明作者和出处,并添加本页链接。
原文链接:
//svn.seekcy.com:33382/280