发现瓶颈 - 操作系统的剖析

操作系统的剖析

查看操作系统统计信息是非常有用的,这样可以发现操作系统和硬件的工作情况。它不仅仅能帮助剖析整个应用,也可以帮助解决修复一些问题。

 

这部分的操作系统主要是类UNIX的系统,因为大部分服务器都是用它们。然而,你也可以使用其中的一些技术用于其他的操作系统,只要它们都提供信息就行。

 

我们经常使用的工具是vmstat,iostat,mpstat以及strace.这些工具在结合进程,CPU,内存以及I/O活动上,有着稍微不同的角度。这些工具对于类UNIX系统都基本可用。我们将教你使用这些工具,贯穿于本教程。

 

 

解决MySQL连接和进程的疑难杂症

 

有一组工具是用来发现网络活动以及解决基本的问题(先不讨论它们其他的细节)。一个例子,我们教你怎样跟踪一个MySQL的连接从另一个服务器返回到起点服务器。

 

先从MySQL的SHOW PROCESSLIST开始,要注意的是一个进程的HOST列。我们使用如下的例子:

 

*************************** 21. row ***************************

Id: 91296

User: web

Host: sargon.cluster3:37636

db: main

Command: Sleep

Time: 10

State:

Info: NULL

 

HOST这列显示了连接的起源,重要的是TCP的端口。你可以从这些信息得知哪个进程开放了连接。如果你有root访问sargon权限,你可以用netstat以及端口号找到哪个进程开放了连接。

 

 

root@sargon# netstat -ntp | grep :37636

tcp 0 0 192.168.0.12:37636 192.168.0.21:3306 ESTABLISHED 16072/apache2

 

最后两个字段是进程号和进程名称:这个例子中进程号为16072的进程开放了链接,它是来自APACHE的。一旦你知道了进程号16072,你能知道关于这进程的许多信息。比如其他的网络连接到了这个进程:

 

 

root@sargon# netstat -ntp | grep 16072/apache2

tcp 0 0 192.168.0.12:37636 192.168.0.21:3306 ESTABLISHED 16072/apache2

tcp 0 0 192.168.0.12:37635 192.168.0.21:3306 ESTABLISHED 16072/apache2

tcp 0 0 192.168.0.12:57917 192.168.0.3:389 ESTABLISHED 16072/apache2

 

看起来有apache工作进程有两个MySQL连接开放,以及还有一个其他的连接。什么是389端口。不能确定,有许多应用程序都用到了这个端口。比如MySQL的默认端口就是3306。在/etc/services有个列表,让我们看看:

 

 

root@sargon# grep 389 /etc/services

ldap 389/tcp # Lightweight Directory Access Protocol

ldap 389/udp

 

我们发现这个服务器使用了LDAP认证。因此LDAP才有意义。让我们再看看还能找到进程16702其他的信息。可以使用PS很容易查看进程正在做什么。命令如下:

 

root@sargon# ps -eaf | grep 'UID\|16072'

UID PID PPID C STIME TTY TIME CMD

apache 16072 22165 0 09:20 ? 00:00:00 /usr/sbin/apache2 -D DEFAULT_VHOST...

 

你可以用潜在的信息找出其他的问题。不要惊讶,比如,对于APACHE要找出一个LDAP或者NFS服务所引起的问题以及显示页面生成时间(page-generation)。

 

你也能用lsof命令查看那些线程打开的文件。这是对于查找所有信息排序是非常有用的,因为在Unix中所有的都是文件。我们不会把输出在这全部显示,因为信息量太大,但是你可以lsof|grep 16072找到这个进程所打开文件。当netstat不好用的时候,你也可以使用lsof找出网络连接。比如,如下的lsof命令显示的信息和netstat信息一样。我们把信息重写排下格式:

 

root@sargon# lsof -i -P | grep 16072

apache2 16072 apache 3u IPv4 25899404 TCP *:80 (LISTEN)

apache2 16072 apache 15u IPv4 33841089 TCP sargon.cluster3:37636->

hammurabi.cluster3:3306 (ESTABLISHED)

apache2 16072 apache 27u IPv4 33818434 TCP sargon.cluster3:57917->

romulus.cluster3:389 (ESTABLISHED)

apache2 16072 apache 29u IPv4 33841087 TCP sargon.cluster3:37635->

hammurabi.cluster3:3306 (ESTABLISHED)

 

在GNU/Linux,/proc能提供其他未知错误解决方法的帮助。每个进程在/proc下都有自己的目录。你可以查看到很多信息,比如当前工作的目录,内存的使用以及等等。

 

Apache有类似PS命令的功能:/server-status/ URL.举个例子,如果你内网运行APACHE在http://intranet/.你可以查看http://intranet/server-status/查看APACHE的情况。这个功能能帮助你查看这个进程提供了什么URL。这个页面有个图例来解释这些输出。

 

 

高级的剖析和解决问题

如果你需要更深层次的分析进程。一个例子,为什么它在不间断休眠状态-你可以使用trace -p 和/或者 gdb -p.这些命令可以显示系统调用以及回溯(backtraces)。当进程停住的时候也可以用它查看更多的信息。许多原因都可以导致进程停住,比如NFS锁住了服务而崩溃了,一个web远程调用没有相应,等等。

 

你也可以剖析系统或者系统的一部分的更多细节,以查看系统的工作情况。如果你需要更高的性能和已经出现了问题,你甚至可能要剖析MySQL内部。虽然这可能不是你的工作(这是MySQL开发人员的工作?),但是它能帮助你避免由系统引起的问题。你可能不想解决它,但是至少你设计应用的时候避免一些弱点。

 

下面的一些工具可能用的到:

OProfile

OProfile (http://oprofile.sourceforge.net)是个对于Linux的系统剖析工具。它包括了一个内核的驱动以及一个后台程序用于收集示例数据,以及许多工具帮你分析剖析的数据。它剖析了所有的数据,包括了中断的操作,内核,内核模块,应用,以及共享库。如果使用了DEBUG元件编译了一个应用,OProfile能注释代码,但是这不是必须的。你可以使用OProfile而不必重新编译。它相对来说是低消耗的,通常的范围为几个百分点。

 

gprof

gprof是个GNU的剖析器,你可以生成一个可执行的用-pg参数编译的程序的剖析。它能计算每次例行程序花费的总时间。gprof也能提供生成如下信息的报表,调用函数的次数和执行时间,一个调用的图形,注释源码的列表。

 

其他工具

还有许多其他的工具,包括了特殊的和专用的应用。这些包括了Intel VTune,Sun Performance Analyzer,DTrace以及其他系统。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值