J. Doe Asked: 2021-07-02 05:55:54 +0800 CST2021-07-02 05:55:54 +0800 CST 2021-07-02 05:55:54 +0800 CST 如何识别系统上“最需要线程”的应用程序/服务? 772 在 htop 中,我看到超过 1500 个线程。我如何知道它们与机器上运行的内容相关的分布? 值得注意的是,只有 2 个在运行;所以也许很多 CPU 时间只是为了访问睡眠线程而浪费了? cpu linux 1 个回答 Voted Best Answer user1686 2021-07-02T06:18:20+08:002021-07-02T06:18:20+08:00 按下T以在树视图中查看线程,在它们的父进程下。您还可以通过htop 设置屏幕添加NLWP显示每个进程的线程数的列。F2(尽管它的名称,该列向您显示内核线程的数量,与用户空间 LWP 无关。) 一般来说,这些数字远非“不寻常”或“过大”(对于现代 12 核系统而言更是如此)。如果总数达到6-7k,我只会费心调查。 未运行但仅等待被某些特定事件唤醒的进程或线程(例如等待 poll(2) 系统调用返回)不会占用任何 CPU 时间。调度程序不会一直检查每个任务正在等待什么以及是否需要唤醒 - 相反,事件本身 知道在完成时要唤醒哪些任务。 例如,如果您的 Apache httpd 有 256 个线程在套接字上等待传入连接,那么调度程序甚至不会查看它们,除非套接字上有活动。 换句话说,唯一真正需要为每个进程或线程花费 CPU 时间的是htop 本身(因为它确实每秒重新扫描每个任务的状态)。
按下T以在树视图中查看线程,在它们的父进程下。您还可以通过htop 设置屏幕添加
NLWP
显示每个进程的线程数的列。F2(尽管它的名称,该列向您显示内核线程的数量,与用户空间 LWP 无关。)一般来说,这些数字远非“不寻常”或“过大”(对于现代 12 核系统而言更是如此)。如果总数达到6-7k,我只会费心调查。
未运行但仅等待被某些特定事件唤醒的进程或线程(例如等待 poll(2) 系统调用返回)不会占用任何 CPU 时间。调度程序不会一直检查每个任务正在等待什么以及是否需要唤醒 - 相反,事件本身 知道在完成时要唤醒哪些任务。
例如,如果您的 Apache httpd 有 256 个线程在套接字上等待传入连接,那么调度程序甚至不会查看它们,除非套接字上有活动。
换句话说,唯一真正需要为每个进程或线程花费 CPU 时间的是htop 本身(因为它确实每秒重新扫描每个任务的状态)。