gpt4 book ai didi

c++ - 分析多进程系统

转载 作者:行者123 更新时间:2023-11-30 05:30:43 25 4
gpt4 key购买 nike

我有一个系统需要分析。

它由数十个进程组成,主要是 C++,一些由多个线程组成,它们通过各种系统调用与网络通信并相互通信。

我知道有时会出现性能瓶颈,但没有人花时间/精力检查它们的位置:它们可能在用户空间代码中、系统调用的低效使用或其他原因。

分析这样一个系统的最佳方法是什么?我想到了以下策略:

手动记录各种代码序列(例如处理传入数据包或 cli 命令)的往返时间,并查看哪个进程花费的时间最长。之后,分析该过程,解决问题并重复。

这个方法看起来有点老套和靠猜测。我不喜欢它。

您建议如何解决这个问题?是否有可以帮助我的工具(多进程分析器?)?

我寻找的更多是一种策略,而不仅仅是特定的工具。

我应该分别分析每个进程并查找问题吗?如果是这样,我该如何处理?

我是否尝试隔离有问题的进程并从那里开始?如果是这样,我该如何隔离它们?

还有其他选择吗?

最佳答案

我认为这类问题没有单一的答案。每种类型的问题都有其自身的问题和解决方案。

通常,第一步是弄清楚大系统中的什么地方花费了时间。它是受 CPU 限制还是受 I/O 限制?

如果问题受 CPU 限制,则系统范围的分析工具可用于确定系统中的时间花费在何处 - 下一个问题当然是该时间是否真的有必要,没有自动化工具可以区分执行一百万个完全无用的处理步骤的编写糟糕的代码与非常有效地执行一百万个元素的矩阵乘法的代码之间的区别 - 执行两者需要相同的 CPU 时间,但一个是'实际上取得了任何成就。但是,了解在多程序系统中哪个程序占用了大部分时间可能是确定代码是否编写良好或是否可以改进的良好起点。

如果系统受 I/O 限制,例如网络或磁盘 I/O,那么分析磁盘和网络流量的工具可以提供帮助。但同样,期望该工具指出您应该期望的数据包响应或磁盘访问时间是另一回事 - 如果您联系谷歌搜索“kerflerp”,或者如果您联系一米外的本地网络服务器,将会有对做出合理 react 的时间产生巨大影响。

还有很多其他问题 - 并行运行两段使用大量内存的代码可能导致两者运行速度比按顺序运行时慢 - 因为高内存使用率导致交换,或者因为操作系统'例如,无法使用备用内存来缓存文件 I/O。

另一方面,在多处理器系统上并行运行两个或多个使用很少内存的简单进程将受益匪浅。

将日志记录添加到您的应用程序,这样您就可以看到它把时间花在了哪里,这是另一种相当有效的方法。特别是如果您知道需要时间的用例是什么。

如果你有一个你知道“这应该不会超过 X 秒”的用例,运行定期的提交前或提交后测试来检查代码是否按预期运行,并且没有人添加很多减慢速度的代码也很有用。

关于c++ - 分析多进程系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35855167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com