所以我已经处理这个问题有一段时间了,我很难找到解决这个问题的工具,我必须想象这个问题是存在的。下面是我的基本问题:
daemon
调用),将它绑定到一个特定的taskset
上,然后让它离开。每隔几个小时左右,就会有一些东西抢先我们的PTP客户端,或者出于某种原因,让它不能运行,时间是10 on 500 on。因为我知道PTP运行在哪个CPU上,所以我认为相对来说,跟踪这个CPU正在发生什么是比较容易的。不幸的是,虽然在给定的时间(顶级和朋友)或最近的某个时间(sar和朋友)很容易跟踪某个CPU正在发生的事情,但是很难捕捉到可能只持续很短一段时间(毫秒范围内)但不经常(每隔几个小时左右)的性能高峰。我试过以下几种方法(但我并不声称它们都正确使用过!)因此,如果您认为我使用了正确的工具,请告诉我):
那么,你会如何解决这个问题呢?我知道我的用户PTP守护进程被搞砸了,因为据我所知,在一个基本的层次上,它从网络中获得绝对时间,而PTP试图使时钟频率和滴答值更接近那个时间。然而,如果出于某种原因(比如PTP会挨饿/暂时不运行),并且它看到的当前时间和它认为主时间是相当大的(通常大于1s),它就会继续前进,设置/强制时钟,而不会使它倾斜,这确实会扰乱应用程序,这些应用程序并不期望时钟会发生剧烈的变化(在这种情况下,时间急剧超过200 1s,但是我们确实看到了当时钟立即移动半秒钟或更长时间时,事情就会崩溃)--这正是我所看到的。正如我所说的,我们将它设置为一个CPU,所以我知道它运行在哪个CPU上。我们在我们的grub.conf中隔离,并且改变init的亲和力,这样init产生的子进程在特定的(不同的) CPU中产生,所以理论上我们可以完全控制CPU PTP正在运行in...but --有些东西仍然在阻止PTP在需要的时候接收数据包,我一直在努力跟踪它。
作为记录,是的,我确实知道我们应该将PTP作为内核模块运行,并且通过chrt‘将PTP守护进程设置为具有高(低)优先级的FIFO来避免这个问题,这似乎确实解决了这个问题,但随着时间的推移,这是一个关于在特定CPU上跟踪系统性能的一般性问题。你们怎么着手解决这个问题?
非常感谢!任何帮助都是非常感谢的。
发布于 2016-03-31 02:45:59
我遇到了一个类似于您的问题(有一个由Nagios使用的短命的、写好的监视器应用程序)。我想出的解决方案是收藏品和bash循环的组合。
因为收集器可以像这样被进程名唤醒
collectl -sZ -i.1:.1 --procfilt f[your process name]
当然,我知道我将调用哪个进程,所以我将其放入这样的循环中:
for((i=1;i<10000;i++)); do nohup /path/to/your/app & done
不确定这是否符合你的需要。另外,最好在任何VM /备用机器上进行测试。
发布于 2016-03-31 19:56:55
普雷克-你比我早。总是很高兴看到别人回答问题。为了记录在案,您可以说-i:.1,它将对非进程数据使用默认的1秒,但是由于您没有任何数据,所以输入的次数要少一些;)
同样非常清楚的是,进程名称有点痛苦。对于f,您需要记录在/proc/pid/stat中的名称,该名称通常可以工作。如果使用c,它将匹配/proc/pid/cmdline中的任何内容,其中包含指向命令的路径,甚至是开关。我的经验法则是,如果你找不到f,试试c,我猜你也很熟悉p,p和其他选项。我永远记不住他们的全部,所以总是提到收藏品
-mark
https://unix.stackexchange.com/questions/272752
复制相似问题