可能重复:
在终止进程之前保存 gmon.out
我正在尝试在 Linux 环境中分析服务器(我可以使用源代码。c 代码)。该服务器像 Web 服务器一样连续运行。我正在尝试使用 gprof 来分析服务器。如果服务器自行退出,则会生成 gmon.out 文件。我可以使用 gprof 和 gmon.out 来了解分析数据。现在我遇到的问题是,这台服务器一直在运行,等待传入的套接字连接、请求等。如果我杀了这台服务器,则不会生成 gmon.out。此时我看到以下选项。
- 在收到 SIGKILL 信号后将源代码更改为配置文件并记录此信息。这是迄今为止最糟糕的解决方案,可能会在测量中引入噪声。
- 也许有一种方法可以在服务器仍在运行时使用 gprof 来分析该服务器。
- 其他工具可以尝试吗?
编辑:服务器是多进程服务器。在 FreeBSD 7.2 上运行
我敢肯定,人们以前已经解决过这类问题。我没有找到关于 SO 或外部的有用信息。
我很欣赏人们的任何想法/解决方案。
谢谢一堆。
更新 1:
- gprof 似乎不适用于多进程服务器。当我在执行服务器后设法获得 gmon.out 时,只有父进程被检测,它实际上并没有做真正的工作!。
- oProfile 不支持我的服务器运行的 FreeBSD。由于各种原因,我不能(不允许)更改操作系统。
- Valgrind 网站没有 FreeBSD 的端口。但是有一些引用到 FreeBSD 的移植。我找不到 FreeBSD 端口源。
不知何故,我设法获得了 valgrind 的端口。当我运行 make 我得到以下错误。
=> valgrind-stable-352.tar.gz doesn't seem to exist in /usr/obj/ports/distfiles/.
=> Attempting to fetch from ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/.
fetch: ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/valgrind-stable-352.tar.gz: File unavailable (e.g., file not found, no access)
=> Attempting to fetch from http://www.rabson.org/.
fetch: http://www.rabson.org/valgrind-stable-352.tar.gz: No address record
=> Couldn't fetch it - please try to retrieve this
=> port manually into /usr/obj/ports/distfiles/ and try again.
*** Error code 1
我试图在网上找到 valgrind-stable-352.tar.gz。我发现的所有链接都已失效。
我在 freebsd 上安装了 pstack,实现的 pstack 只提供堆栈跟踪。参考:http: //sourceforge.net/projects/bsd-pstack/
我的理解是 systemtap 仅用于内核空间事件、检测等。
我可能是错的或没有足够的信息。请纠正我并提出您的想法。我非常感谢您的帮助。
更新 2:我认为提供有关我正在尝试分析的服务器的一些详细信息会很有帮助。
- 它是多服务器程序。I/O bound,具体是mysql数据库。
- 不涉及线程。每个子服务器进程只处理一个请求。服务器启动时会创建可配置数量的进程。
- 我想找出每个函数花费的时间及其频率。功能代码是 CPU 绑定和 IO 绑定的混合体(我相信更多的 IO)。
- 它在 FreeBSD 7.2 上运行
- 写在c。读取次数远大于通过此服务器写入数据库的次数。