有时,在我打开台式电脑后,4 个核心中的一个会随机达到 100%,并且机器会“冻结”。
好吧,我已经htop
从远程连接运行它,我可以看到所有进程仍在工作。
发生的一件有趣的事情是,例如:YouTube 视频将继续播放其音频,但屏幕完全冻结,甚至鼠标也不会改变其位置。
在 htop 的列表顶部,这次是 kworker,CPU 使用率达到 100%,但其他时候没有进程达到 100%。 cpu 1(核心索引 0)为 100%。因此,核心 0 的使用率约为 10%,其余条全部为红色,填充至 100%。我认为红色填充指示灯是 IO 等待吧?
那么平均负载将不会停止增加。
所以我猜它与某种IO有关,我猜是视频IO?我可以使用哪些命令来测试它?
在这种情况下,我什至无法创建新的远程连接,它不会接受,只会冻结尝试。因此,我将在循环中启动此类命令,并在下次冻结发生时监视其输出。
答案1
是的,可能是视频io。因为有一个kworker开到100%,所以也有中断溢出。
Linux 上的中断处理分为两个步骤:1)直接中断处理程序将所有中断数据收集到临时队列中2)工作线程不在中断处理程序中工作,而是作为单独的内核线程工作。它们本质上是进程 - 但没有用户空间,它们完全在内核中运行。
之所以如此,是因为中断处理程序...中断。它可以随时发生,忽略任何锁等。因此,它们应该尽可能少地进行复杂的数据结构处理。问题类似,因为您只能从用户空间信号处理程序调用几个函数。因此,它们将中断数据收集到队列中,然后工作线程处理这些已经在内核空间之外的队列。
现在的问题是视频芯片不会中断太多,视频驱动程序的任务只是设置 vga 设置并生成到屏幕的映射缓冲区。他们不应该打扰太多,但尽管如此,这种情况还是发生了很多。
YouTube 音频不会停止,因为它是一个多线程的东西,它的音频处理线程甚至不知道视频播放器已挂起。
你的 dmesg 里有什么?
我怀疑 vga 硬件有问题或驱动程序有问题。