OProfile是一个非常好的工具,在Linux下分析一个软件或者服务的系统消耗和占用,进而辅助我们找到系统的瓶颈。例如,我们开启Oprofile在redis服务中,然后找到结果中redis耗时最多的几个函数,然后去了解这些函数是用在了什么地方,是否可以优化或者避免。
Oprofile的安装流程网上很多,就不写了哈。我写了一个方面测试的shell脚本,在安装好Oprofile后,可以很方便地用来测试这些系统服务。
简单的用法是:
shell的脚本代码如下:
系统如果支持time interrupt的话,执行命令
否则的话,直接追加:
我使用上述脚本来分析过一次Nginx的执行结果(通过http_load工具来跑nginx的压力测试):
我们也曾经遇到过Web服务器莫名其妙CPU100%的奇怪问题,也是通过oprofile分析后才发现一些可疑的函数库调用,反过来分析代码,找到问题原因。
下面这个图片,就是发现libxml大量占用CPU,让我们发现代码中解析xml的相关代码使用不当导致的。
转自 http://hansionxu.blog.163.com/blog/static/24169810920150541846331/
Oprofile的安装流程网上很多,就不写了哈。我写了一个方面测试的shell脚本,在安装好Oprofile后,可以很方便地用来测试这些系统服务。
简单的用法是:
oprofile.sh "php test.php"
当然,也可以只做sleep,不执行具体命令。直接休眠100s,抓取系统执行中的各种系统消耗。oprofile.sh "sleep 100"
shell的脚本代码如下:
#部分系统不支持time interrupt,会导致抓不到数据,可使用modprobe oprofile timer=1#查看状态:dmesg|grep oprofile,会追加多一行#!/bin/bash if [ $# -ne 1 ];then echo "Usage: oprofile.sh command" echo 'Example: /root/oprofile/oprofile.sh "php test.php"' exit 2; fi echo `date -d "today" +%Y%m%d%H%M%S` opcontrol --start --no-vmlinux opcontrol --reset $1 opcontrol --dump opreport -l opcontrol --stop opcontrol --shutdown
dmesg|grep oprofile
modprobe oprofile timer=1
我使用上述脚本来分析过一次Nginx的执行结果(通过http_load工具来跑nginx的压力测试):
我们也曾经遇到过Web服务器莫名其妙CPU100%的奇怪问题,也是通过oprofile分析后才发现一些可疑的函数库调用,反过来分析代码,找到问题原因。
下面这个图片,就是发现libxml大量占用CPU,让我们发现代码中解析xml的相关代码使用不当导致的。