如何识别系统上“线程最密集”的应用程序/服务?

如何识别系统上“线程最密集”的应用程序/服务?

在 htop 中,我看到超过 1500 个线程。我如何知道它们与机器上运行的线程相关的分布情况?

值得注意的是,只有 2 个线程在运行;所以也许只是为了访问休眠线程就浪费了大量的 CPU 时间?

在此处输入图片描述

答案1

T以树状视图查看父进程下的线程。您还可以NLWP通过 htop 设置屏幕添加显示每个进程的线程数的列F2。(尽管名称如此,但该列显示的是内核线程数,与用户空间 LWP 无关。)

在此处输入图片描述

总体而言,这些数字远非“不寻常”或“过大”(对于现代 12 核系统而言更是如此)。只有当总数达到 6-7k 时,我才会费心调查。

未运行但仅等待被某些特定事件唤醒(例如等待 poll(2) 系统调用返回)的进程或线程不占用任何 CPU 时间。调度程序不会继续检查每个任务在等待什么以及是否需要被唤醒——相反,事件本身 知道唤醒哪些任务当它完成时。

例如,如果您的 Apache httpd 中有 256 个线程正在等待套接字上的传入连接,则除非套接字上有活动,否则调度程序甚至不会查看它们。

换句话说,每个进程或线程实际需要花费 CPU 时间的唯一事情是htop 本身(因为它确实每秒重新扫描每个任务的状态)。

相关内容