服务器性能分析工具gprof的使用及没有生成gmon.out文件的原因
从网上总结了gprof使用的注意事项,说不定以后会用到:
一,gprof只能查看用户函数信息。如果想查看库函数的信息,需要在编译是再加入"-lc_p"编译参数代替"-lc"编译参数,这样程序会链接libc_p.a库,如果系统没有libc_p.a库,需要自己编译这个库。
二,gprof不能产生gmom.out文件的原因:gprof只能在程序正常结束退出之后才能生成程序测评报告,原因是gprof通过在atexit()里注册了一个函数来产生结果信息,任何非正常退出都不会执行atexit()的动作,所以不会产生gmon.out文件。所以,以下情况可能不会有gmon.out文件产生:
1,程序不是从main return或exit()退出,则可能不生成gmon.out。
2,程序如果崩溃,可能不生成gmon.out。
3,测试发现在虚拟机上运行,可能不生成gmon.out。
4,程序忽略SIGPROF信号!一定不能捕获、忽略SIGPROF信号。man手册对SIGPROF的解释是:profiling timer expired. 如果忽略这个信号,gprof的输出则是:Each sample counts as 0.01 seconds. no time accumulated.
5,如果程序运行时间非常短,则gprof可能无效。因为受到启动、初始化、退出等函数运行时间的影响。如果你的程序是一个不会退出的服务程序,那就只有修改代码来达到目的。如果不想改变程序的运行方式,可以添加一个信号处理函数解决问题(这样对代码修改最少),例如:
static void sighandler( int sig_no )
{
exit(0);
}
signal( SIGUSR1, sighandler );
这样当使用kill -USR1 pid 后,程序退出,生成gmon.out文件。
三,多线程使用:
gprof无法分析多线程程序。缘故是gprof使用ITIMER_PROF定时器, 当超时时由内核向应用程序发送信号。但多线程程序只有主线程接收ITIMER_PROF。 这里有一个简单的实现方法: 对pthread_create进行保证,并以动态库的形式在程序运行前加载。
推荐文章:http://blog.csdn.net/stanjiang2010/article/details/5655143
转自:http://blog.csdn.net/ym012/article/details/7094700
crazyhacking的代码如下,
#include<signal.h>
#include<iostream>
using namespace std;
static void sighandler(int sig_no);
int main(){
cout<<"begin"<<endl;
signal(SIGUSR1,sighandler);
for(;;){
    cout<<"sleep 2"<<endl;
    sleep(2);
}
return 1;
}
static void sighandler(int sig_no){
if(sig_no==SIGUSR1)
    cout<<"received singal:"<<sig_no<<" ,exit "<<endl;
}
使用如下 : kill -USR1 70924
使用gmoun.out    使用 gprof –b
   ./hello   gmont.out  >report 时,查看   Call graph下边的
查看占比 例如, 21.1    0.01    0.12   16255         bfd::migration::jsontomap  占比21%
服务器性能分析工具gprof的使用及没有生成gmon.out文件的原因的更多相关文章
- 性能分析工具gprof介绍(转载)
		
性能分析工具gprof介绍Ver:1.0 目录1. GPROF介绍 42. 使用步骤 43. 使用举例 43.1 测试环境 43.2 测试代码 43.3 数据分析 53.3.1 flat profil ...
 - 「功能笔记」性能分析工具gprof使用笔记
		
根据网上信息整理所成. 功能与优劣 gprof实际上只是一个用于读取profile结果文件的工具.gprof采用混合方法来收集程序的统计信息,它使用检测方法,在编译过程中在函数入口处插入计数器用于收集 ...
 - Linux性能分析工具与图形化方法
		
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~. 作者:赵坤|腾讯魔王工作室后台开发工程师 在项目开发中,经常会遇到程序启动时间过长.CPU使用率过高等问题,这个时候需要依靠性能分析工具来 ...
 - Java 性能分析工具 , 第 3 部分: Java Mission Control
		
引言 本文为 Java 性能分析工具系列文章第三篇,这里将介绍如何使用 Java 任务控制器 Java Mission Control 深入分析 Java 应用程序的性能,为程序开发人员在使用 Jav ...
 - Java 性能分析工具 , 第 2 部分:Java 内置监控工具
		
引言 本文为 Java 性能分析工具系列文章第二篇,第一篇:操作系统工具.在本文中将介绍如何使用 Java 内置监控工具更加深入的了解 Java 应用程序和 JVM 本身.在 JDK 中有许多内置的工 ...
 - Java 性能分析工具 , 第 1 部分: 操作系统工具
		
引言 性能分析的前提是将应用程序内部的运行状况以及应用运行环境的状况以一种可视化的方式更加直接的展现出来,如何来达到这种可视化的展示呢?我们需要配合使用操作系统中集成的程序监控工具和 Java 中内置 ...
 - 性能分析工具-PerfView
		
Roslyn的PM(程序经理) Bill Chiles,Roslyn使用纯托管代码开发,但性能超过之前使用C++编写的原生实现,这有什么秘诀呢?他最近写了一篇文章叫做<Essential Per ...
 - 11个Visual Studio代码性能分析工具
		
软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和 ...
 - Linux性能分析工具的安装和使用
		
转自:http://blog.chinaunix.net/uid-26488891-id-3118279.html Normal 0 7.8 磅 0 2 false false false EN-US ...
 
随机推荐
- 根据key存不存在查询json
			
select * from table where value->'key' != 'null';
 - java内部类继承--构造函数传参
			
/: innerclasses/InheritInner.java // Inheriting an inner class. class WithInner { class Inner {} } / ...
 - hdu 1728 逃离迷宫 (BFS)
			
逃离迷宫 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissi ...
 - 红帽linux忘记root密码的配置
			
1.启动linux,不停按上下键,注意鼠标要点击进去才行. 2.按e键. 3.选择kernel/.... 再按e键 4.空格+single 按enter键. 5.按B键,进入root权限. ...
 - play1.x vs play2.x 对比(转)
			
个人看到对比play1.x和play2.x比较的文章中,写的最深入,最清晰的一个.转自:http://freewind.me/blog/20120728/965.html 为了方便群中的Play初学者 ...
 - Magento首页显示产品
			
Magento首页显示产品 经常用的比较琐碎,上官网发现一个稍微全一点的不过没有针对 具体使用过程中遇到的情况进行修正 这边只做一个备忘吧 (细节问题 按个别情况进行修改即可) New ...
 - Django源码解析
			
http://www.cnblogs.com/pythoner/archive/2011/07/30/2121599.html
 - 在数据库里面有这么一个表:用m代表男,用f代表女,现在我要输出格式为中文的:男和女,sql语句该怎么写
			
在数据库里面有这么一个表:用m代表男,用f代表女,现在我要输出格式为中文的:男和女, sql语句该怎么写 select case sex when 'm' then '男' else '女' a ...
 - C#入门经典第四章-流程控制-1
			
布尔类型:
 - copy_part_stat.sql
			
spool 04_copy_part_stat.log conn / as sysdba execute sys.dbms_stats.export_schema_stats(ownname=> ...