首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何分析运行在FreeBSD上的持续运行的服务器

如何分析运行在FreeBSD上的持续运行的服务器
EN

Stack Overflow用户
提问于 2011-03-03 21:12:38
回答 8查看 2.4K关注 0票数 13

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

我正在尝试分析一个服务器(我可以使用源代码)。C-代码)在Linux环境中。此服务器像web服务器一样连续运行。我试图使用gprof来分析服务器。如果服务器本身退出,则生成gmon.out文件。我可以使用gprof和gmon.out来理解配置数据。现在我遇到的问题是,这个服务器一直在运行,等待传入的套接字连接、请求等等。如果我杀死这个服务器,就不会生成gmon.out。在这一点上,我看到以下选项。

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

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

我敢肯定,人们以前也解决过这类问题。我没有找到关于这样或外部的有用的信息。

我很欣赏人们的任何想法和解决方案。

谢谢一堆。

更新1:

  1. gprof似乎不适用于多进程服务器。当我在执行服务器后设法获得gmon.out时,只有父进程被检测,而实际上它并不能完成真正的工作!
  2. oProfile不支持FreeBSD,而这正是我的服务器正在运行的。由于各种原因,我不能(不允许)更改操作系统。
  3. 华润网站没有FreeBSD的端口。但是有一些对FreeBSD端口的引用。我未能找到FreeBSD端口源。

不知何故,我设法弄到了港口,以供伐研之用。当我运行make时,我会得到以下错误。

代码语言:javascript
复制
=> 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

我试着在网上找到稳定的-352.tar.gz。我发现的所有链接都死了。

  1. 我在freebsd上安装了p堆栈,而已实现的p堆栈只提供堆栈跟踪。参考资料:http://sourceforge.net/projects/bsd-pstack/
  2. 我的理解是,系统开发只适用于内核空间事件、仪器仪表等。

我可能错了或者没有足够的信息。请纠正我并给出你的想法。我真的很感谢你的帮助。

UPDATE 2:我认为给出一些关于我试图分析的服务器的细节将是有帮助的。

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

回答 8

Stack Overflow用户

发布于 2011-03-03 21:24:27

当然,您应该使用分析关键生产系统的方法,使用O形或/和系统抽头,但是它们可能已经包含在发行版中了。

票数 5
EN

Stack Overflow用户

发布于 2011-03-03 22:35:30

即使你有政府为你服务,也有问题。

  • 它对任何系统调用或I/O都是盲目的,它是基于这样一种假设:您永远不会做不必要的挂起。它只研究CPU绑定问题。
  • 如果有任何递归,它就是不能处理它。
  • 它给你的时间是基于不稳定的假设,比如每次调用例程所花费的时间都是一样的。它不会给你任何线级信息。

测量是一回事,但是如果你想找到做不必要的事情的“瓶颈”,不管是CPU还是I/O,一个非常粗糙但有效的工具是lsstack (我认为它在SourceForge上)。

另外,看看缩放。它是一个用于Linux的墙壁时间堆栈采样器.它给出了线级百分比,我相信它可以与运行中的进程连接和分离。

票数 3
EN

Stack Overflow用户

发布于 2011-03-10 19:01:49

您可以使用PmcTools -FreeBSD的oProfile类替代方案。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5186621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档