当前位置:首页 > 服务器 > 正文

查看服务器配置


1、如何查看Linux下进程的IO活动状况00Hey,Linux
前段时间,几台测试服务器上的Web应用响应速度非常慢,系统负载较高(>10),但CPU和内存非常空闲,所以我怀疑是磁盘性能瓶颈。 我已经通过vmstat和iostat看到了I/O读写。 特别是使用iostat-x1命令,可以直观地看到I/O利用率始终为100%。
但是哪个进程导致了高IO值呢?因为JBoss和MySQL都存在于每台服务器上,JBoss不断生成许多小数据文件和文本数据库数据,而MySQL则不断从master同步新数据。 因此,我们怀疑是这两个进程导致了高IO。 停止JBoss和MySQL后,IO立即降至0%。 但是我们仍然无法确定根本原因是谁,所以我们寻找一种方法来查看特定进程的IO。
最后找到了两种方法来显示进程IO的活动状态。
1.第一种方法是通过Python脚本来实现。
方法是将以下内容保存为名为io.py的脚本,然后直接以root身份运行该脚本。 可以看到如下信息(因为我们通过升级SSD解决了MySQL问题)。 磁盘IO问题,所以我无法提供有关MySQL的屏幕截图。 其中,出现次数最多、数据量最大的进程是造成高IO问题的主要原因。 不幸的是,这个脚本无法显示进程每秒的准确I/O读写情况。
#vimio.py
#chmod+xio.py
#./io.py
#!/usr/bin/python
#Monitoringper-processdiskI/Oactivity
#writingbyhttp://www.vpsee.com
importsys,os,time,signal,re
classDiskIO:
def__init__(self,pname=None,pid=None,reads=0,writes=0):
self.pname=pname
self.pid=pid
self.reads=0
self.writes=0
defmain():
argc=len(sys.argv)
ifargc!=1:
print"usage:./iotop"
sys.exit(0)
ifos.getuid()!=0:
打印“mustberunasroot”
sys.exit(0)
signal.signal(signal.SIGINT,signal_handler)
os.system('echo1>/proc/sys/vm/block_dump')
打印“TASKPIDREADWRITE”
whileTrue:
os.system('dmesg-c>/tmp/diskio.log')
l=[]
f=open('/tmp/diskio.log','r')
line=f.readline()
whileline:
m=re.match(\
'^(\S+)\((\d+)\):(READ|WRITE)block(\d+)on(\S+)',line)
ifm!=None:
ifnotl:
l.append(DiskIO(m.group(1),m.group)(2)))
line=f.readline()
继续
found=False
foriteminl:
ifitem.pid==m.group(2):
found=True
ifm.group(3)=="READ":
item.reads=item.reads+1
elifm.group(3)=="WRITE":
item.writes=item.writes+1
ifnotfound:
l.append(DiskIO(m.group(1),m.group(2)))
line=f.readline()
time.sleep(1)
foriteminl:
print"%-10s%10s%10d%10d"%\
(item.pname,item.pid,item.reads,item.writes)
defsignal_handler(signal,frame):
os.system('echo0>/proc/sys/vm/block_dump')
sys.exit(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选项。
解压内核后,进入配置界面:
#wgethttp://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.tar.gz
#tarjxvflinux-2.6.39.tar.gz
#mvlinux-2.6.39/usr/src/
#cd/usr/src/linux-2.6.39
#makeoldconfig//使用makeoldconfig。 你可以继承旧内核的配置,省去自己配置的很多麻烦。
#makemenuconfig
选择Generalsetup-Enableper-taskstorageI/Oaccounting选项。
#vim.config
去掉注释#CONFIG_SYSFS_DEPRECATED_V2isnotset,改为y,即改为CONFIG_SYSFS_DEPRECATED_V2=y。
保存内核后编译内核:
#make
#makemodules
#makemodules_install
#makeinstall
更改默认值以使用新内核:
#vi/boot/grub/grub.conf
default=0
将新的内核配置文件复制到/boot目录中:
#cp/usr/src/linux-2.6.39/.config/boot/config-2.6.39
重启服务器:
#reboot
#uname–r
2.6.39
重启后完成后,检查内核版本是否正确。
iotop源代码安装需要Python2.7.2(>=2.5):
#wgethttp://www.python.org/ftp/python/2.7.2/Python-2.7.2。
#tarxzvfPython-2.7.2.tgz
#cdPython-2.7.2
#./configure
#make;makeinstall
下载并安装iotopes:
#tar-xjvfiotop-0.4.4.tar.bz2
#cdiotop-0.4。 4
#pythonsetup.pybuild
#pythonsetup.pyinstall
然后就可以使用iotop显示如下信息: