![如何跟踪一些影响实时性能的周期性系统活动](https://linux22.com/image/1414013/%E5%A6%82%E4%BD%95%E8%B7%9F%E8%B8%AA%E4%B8%80%E4%BA%9B%E5%BD%B1%E5%93%8D%E5%AE%9E%E6%97%B6%E6%80%A7%E8%83%BD%E7%9A%84%E5%91%A8%E6%9C%9F%E6%80%A7%E7%B3%BB%E7%BB%9F%E6%B4%BB%E5%8A%A8.png)
我在运行 64 位 ubuntu-14.04 的双核笔记本电脑上运行 Jack2 和 Pianoteq-5。由于低延迟要求,此类配置对实时性能非常敏感。起初我听到了持续的咔嗒声,当我调整 /etc/security/limits.conf 以启用音频组的 RR 功能时,这种声音基本上消失了。
因此,现在 Jack 和 Pianoteq 都具有带有 SCHED_FIFO 调度类的线程。我可以使用大小为 128 个样本的缓冲区运行 jack,并且它大多数时候运行顺利。我说“大多数”,是因为每隔几分钟左右就会有东西破坏这个天堂。我听到一连串可怕的裂缝声。我怀疑这是后台启动某些高优先级活动的结果。但如何追查罪魁祸首呢?
答案1
这是其中一种方法。会生成大量文件,但我想不出其他方法。
假设您不在身边观察服务器何时变得繁忙,则必须使用 sysstat 来捕获历史资源数据。
第一种方法:使用 sysstat 每 5 分钟收集一次统计数据(每天大约占用 8mb)。您的 cron 条目将类似于 5 * * * * /usr/lib/sa/sa1
或 5 * * * * /usr/lib64/sa/sa1
sysstat 将保存最多一个月的数据。但您也可以随时复制文件并将其存档。
您可以使用“sar”命令回顾历史数据,了解您的服务器何时变得繁忙。
现在您的服务器上已经有了历史数据,您还需要捕获进程输出,以便查看当时正在运行的内容。您可以使用“ps”或“top”来执行此操作
因此,每 5 分钟您还可以捕获 top 和 ps auxww 的输出,以便查看正在运行的所有进程。我将创建两个子目录“toparchive”和“psarchive”,然后将它们作为我的 cron 作业。
5 * * * * top -b -n 1 > /root/toparchive/top.`date +"%Y%m%d_%H%M%S"`
或者
5 * * * * ps auxww > /root/psarchive/ps.`date +"%Y%m%d_%H%M%S"`
(那将会有很多文件,或者您可以编写脚本以便获得带有日期戳的附加子目录,例如 /root/toparchive/20140701/)
但基本上,观察你的系统状态,你就可以发现你的服务器何时变得繁忙,然后检查你捕获的适当的 top 或 ps 输出,看看是什么占用了你的空间
如果该进程占用了内存,您还可以使用“pmap”和“pgrep”来查看当前进程和实际内存使用情况。