如何在Linux中查看最消耗内存和CUP的进程
在linux中,当占用过高的内存或者cpu时,会常常伴随着我们的服务处理变慢或者无响应,这个时候我们需要排查服务器中哪些进程占用过高导致的。或者有时候我们在测试我们的网站时,我们需要观察相关进程是否会出现内存增长过快。
top
top命令包含更多的指标统计,相当于一个综合命令。
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。
通过top命令我们可以快速实时知道服务器中哪些进程会占用过高内存和CPU信息。toptop09:15:26up10:40,1user,loadaverage:0。00,0。01,0。05Tasks:177total,1running,176sleeping,0stopped,0zombieCpu(s):0。0us,3。0sy,0。0ni,97。0id,0。0wa,0。0hi,0。0si,0。0stKiBMem:1863088total,489784free,585660used,787644buffcacheKiBSwap:2097148total,2097148free,0used。1098596availMemPIDUSERPRNIVIRTRESSHRSCPUMEMTIMECOMMAND10146root20016202822881524R6。20。10:00。02top1root20019390870324212S0。00。40:02。74systemd2root200000S0。00。00:00。02kthreadd4root020000S0。00。00:00。00kworker0:0H6root200000S0。00。00:00。18ksoftirqd07rootrt0000S0。00。00:00。05migration08root200000S0。00。00:00。00rcubh9root200000S0。00。00:01。36rcusched10rootrt0000S0。00。00:00。23watchdog011rootrt0000S0。00。00:00。22watchdog112rootrt0000S0。00。00:00。03migration113root200000S0。00。00:00。44ksoftirqd1。。。
当我们想查看消耗内存前3的进程,我们可以执行如下命令
topoMEMheadn3top07:54:12up31min,1user,loadaverage:0。01,0。38,0。43任务:297total,1running,296sleeping,0stopped,0zombieCpu(s):10。0us,10。0sy,0。0ni,80。0id,0。0wa,0。0hi,0。0si,0。0stMiBMem:3890。2total,1037。7free,1171。8used,1680。7buffcacheMiBSwap:2048。0total,2048。0free,0。0used。2467。0availMemUSERPRNIVIRTRESSHRCPUMEMTIMECOMMAND6310root2004064524277464132776S5。67。00:23。08gnomes6528root200113786410421667168S0。02。60:04。71snapst5944root2003624769044456248S0。02。30:13。51Xorg
同理,我们可以使用如下命令查看占用CPU前3的进程
我们也可以只查看某个具体进程的top信息
topp12458只查看PID为12458的进程信息top14:28:47up1day,15:34,3users,loadaverage:0。00,0。00,0。00Tasks:1total,0running,1sleeping,0stopped,0zombieCpu(s):0。0us,0。0sy,0。0ni,100。0id,0。0wa,0。0hi,0。0si,0。0stMem:625344ktotal,574124kused,51220kfree,67024kbuffersSwap:524280ktotal,Okused,524280kfree,409344kcachedPIDUSERPRNIVIRTRESSHRSCPUMEMTIMECOMMAND12458root20045201192580S0。00。20:00。00httpd
ps
ps命令是processstatus的缩写,ps命令用于显示当前系统的进程状态。
使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。
查找特定进程信息:psauxgrepsshroot13030。00。0824681204?SsApr170:00usrsbinsshdroot32600。00。052864572?SsApr170:00usrbinsshagentroot241880。00。0112652956pts0S11:390:00grepcolorautossh。。。
我们可以使用带有sort参数的ps命令按内存和CPU使用率对输出进行排序。
psauxsortcpuUSERPIDCPUMEMVSZRSSTTYSTATSTARTTIMECOMMANDroot18913。16。73992296269128?Ssl07:270:21usrbingnomroot21861。84。11268748167000?Sl07:270:13snapsnapstroot13621。51。145537244384?Ssl07:230:14usrlibexecroot16481。22。135784887008tty2Sl07:270:09usrlibxorgroot36961。00。1199285720pts2Ss07:390:00bash。。。
同理,我们可以使用如下命令按内存的使用率进行排序
psauxsortmem
我们可以根据我们应用程序的名字来获取内存和CPU的使用信
psauxgrepEmanagePID
USERPIDCPUMEMVSZRSSTTYSTATSTARTTIMECOMMAND
root18913。16。73992296269128?Sl07:270:21。manage
pidstat
pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
cpu使用情况统计(u)
使用u选项,pidstat将显示各活动进程的cpu使用统计,执行pidstatu与单独执行pidstat的效果一样。
内存使用情况统计(r)
使用r选项,pidstat将显示各活动进程的内存使用统计:pidstatrp130842以2秒为周期显示进程13084的内存使用信息Linux2。6。32。120。7default(linux)061812x866415:08:18PIDminfltsmajfltsVSZRSSMEMCommand15:08:1913084133835。000。00157202841571689696。26core15:08:201308435807。000。00158635041584975697。07core15:08:211308419273。870。00159490401579294496。72core
以上各列输出的含义如下:minflts:每秒次缺页错误次数(minorpagefaults),次缺页错误次数意即虚拟内存地址映射成物理内存地址产生的pagefault次数majflts:每秒主缺页错误次数(majorpagefaults),当虚拟内存地址映射成物理内存地址时,相应的page在swap中,这样的pagefault为majorpagefault,一般在内存使用紧张时产生VSZ:该进程使用的虚拟内存(以kB为单位)RSS:该进程使用的物理内存(以kB为单位)MEM:该进程使用内存的百分比Command:拉起进程对应的命令