如何配置在FreeBSD上运行的连续运行的服务器

Sri*_*nth 13 c profiling gprof

可能重复:
在终止进程之前保存gmon.out

我正在尝试在Linux环境中分析服务器(可用的源代码.c代码).该服务器像Web服务器一样连续运行.我正在尝试使用gprof来配置服务器.如果服务器自行退出,则会生成gmon.out文件.我可以使用gprof和gmon.out来理解配置文件数据.现在问题是,这台服务器正在连续运行,等待传入的套接字连接,请求等.如果我终止此服务器,则不会生成gmon.out.此时我看到以下选项.

  1. 将源代码更改为配置文件本身,并在收到SIGKILL信号后记录此信息.这是迄今为止最丑陋的解决方案,可能会在测量中引入噪声.
  2. 也许在服务器仍在运行时,有一种方法可以使用gprof来配置此服务器.
  3. 尝试其他工具?

编辑:服务器是多进程服务器.在FreeBSD 7.2上运行

我敢肯定,人们之前已经解决了这些问题.我没能在SO或外面找到有用的信息.

我感谢人们的任何想法/解决方案.

谢谢一堆.

更新1:

  1. gprof似乎不适用于多进程服务器.当我在执行我的服务器后设法获得gmon.out时,只有父进程被检测,实际上并没有真正的工作!
  2. oProfile不支持我的服务器运行的FreeBSD.由于各种原因,我不能(不允许)更改操作系统.
  3. 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
Run Code Online (Sandbox Code Playgroud)

我试图在网上找到valgrind-stable-352.tar.gz.我找到的所有链接都已死亡.

  1. 我在我的freebsd上安装了pstack,实现的pstack只提供堆栈跟踪.参考:http://sourceforge.net/projects/bsd-pstack/

  2. 我的理解是systemtap仅用于内核空间事件,仪器等.

我可能是错的或信息不足.请纠正我并提出你的想法.非常感谢你的帮助.

更新2:我认为提供有关我正在尝试分析的服务器的一些细节会很有帮助.

  1. 它是多服务器程序.I/O绑定,具体是mysql数据库.
  2. 没有线程涉及.每个子服务器进程只处理一个请求.服务器启动时会创建可配置的进程数.
  3. 我想在每个功能及其频率上花费时间.功能代码是CPU绑定和IO绑定的混合(我相信更多的IO).
  4. 它运行在FreeBSD 7.2上
  5. 写在c.读取次数远远大于通过此服务器写入数据库的次数.

nos*_*nos 5

虽然您当然应该对关键生产系统进行分析,但是使用oprofile或/和systemtap,它们可能已包含在您的发行版中.


nmi*_*els 1

您可以覆盖要调用的 SIGTERM 处理程序exit(0),这将导致 gprof 生成通常的gmon.out.