当前位置:首页 > 内存 > 正文

linux查看当前内存

  • 内存
  • 2024-07-30 07:48:32
  • 8784

一、如何查看Linux下进程的IO活动状况00Hey,Linux前段时间,几台测试服务器的Web应用响应速度非常慢,而且系统负载比较高,>10,但是CPU和内存却非常空闲,所以我怀疑是磁盘的性能瓶颈。我通过vmstat和iostat看到了IO的读写。量非常大,尤其是使用iostat-x1命令,可以直观地看到IO使用率始终为100%。
但是什么进程导致IO高呢?由于每台服务器上都存在JBoss和MySQL,JBoss会不断生成很多小数据文件和文本数据库数据,而MySQL会不断从Master同步新数据。因此,我们怀疑这两个进程导致了高IO。停止JBoss和MySQL后,IO立即降至0%。但我们仍然无法确定谁是主要原因,所以我们寻找一种方法来查看特定进程的IO。
最后找到了两种查看进程IO活动状态的方法。
1.第一种方法是通过python脚本来实现。
方法是将以下内容保存为一个名为的脚本,然后直接以root身份执行该脚本,可以看到如下所示的信息(因为我们已经通过升级到SSD解决了MySQL的问题)硬盘IO问题,所以我无法提供有关MySQL的截图)。其中,出现次数最多、数据量最大的进程是造成高IO的主要原因。遗憾的是,这个脚本无法显示进程每一秒的准确IO读写情况。
#
#chmod+
#./
#!/usr/bin/python
#Monitoringper-processdiskI/Oactivity
#writingby
importsys,os,time,signal,re
classDiskIO:
def__init__(self,pname=None,pid=None,reads=0,writes=0):
=pname
=pid
=0
=0
defmain():
argc=len()
ifargc!=1:
print"usage:./iotop"
(0)
()!=0:
print"mustberunasroot"
(0)
(,signal_handler)
('echo1>/proc/sys/vm/block_dump')
打印“TASKPIDREADWRITE”
whileTrue:
('dmesg-c>/tmp/')
l=[]
f=open('/tmp/','r')
line=ne()
whileline:
m=(\
'^(\S+)\((\d+)\):(READ|WRITE)block(\d+)on(\S+)',line)
ifm!=None:
ifnotl:
(DiskIO((1),)(2)))
line=ne()
继续
found=False
foriteminl:
==(2):
found=True
(3)=="READ":
=+1
(3)=="WRITE":
=+1
ifnotfound:
(DiskIO((1),(2)))
line=ne()
(1)
foriteminl:
print"%-10s%10s%10d%10d"%\
(,,,)
defsignal_handler(signal,frame):
('echo0>/proc/sys/vm/block_dump')
(0)
if__name__=="__main__":
main()
2.另一种方法是将Linux内核升级到>=2.6.20,然后安装一个iotop软件来实现。
但是,此更改不适用于生产环境,因为在RHEL5.6和5.7上,内核低于2.6.20。不过它显示的结果非常准确,对于新上线的机器和测试环境值得一试。具体方法如下:
下载并升级新内核(>=2.6.20),编译时打开TASK_DELAY_ACCT和TASK_IO_ACCOUNTING选项。
解压内核后,进入配置界面:
#wget