我在 Windows 10 中遇到了一个奇怪的错误。
闲置 5 分钟后,我的 CPU 变高了。我使用了 Win Performance Analyzer,发现它发生在线程 GetStackLimits 上的 ntoskrnl.exe 中。
我已经更新了所有驱动程序,一切正常。空闲任务都被禁用和删除。我也运行 sfc /scannow 和 chkdsk 没有错误。
当它在内核中时,我应该如何找到错误?!
在那里,当我决定检查代码学院(一个教你如何用 JavaScript 编程的网站,以一种很酷的方式 - 显然)时,我很高兴地使用 Firefox 内置下载管理器从互联网上下载了一堆东西。
因此,在进行了一些练习后,我进入了第 7 课(第 4 项),它要求您填充for循环的条件以将i(循环变量)降为 0。发生的事情是,而不是将循环编写为for (i = 2; i >= 0; i--)触发将带我进入下一课的内置机制,我“错误地”写道for (i = 2; i >= 0; i++),使循环永远持续下去,导致 Firefox 使用 100% 的 CPU,使一切变得模糊,并使我重新加载页面的所有尝试或关闭选项卡。
现在我已经暂停了这个过程kill -STOP <pid>,但我不想关闭 Firefox,因为我正在下载一堆无法恢复的东西,我想知道是否有办法通过命令行关闭这个选项卡。也许有一种方法可以列出所有 Firefox 的线程并尝试单独关闭它们(最坏的情况,我认为 GDB 可以帮助我解决这个问题)。
我目前使用的是 Mac OS X 10.7.2。
我不确定问题的原因是什么,但在类似条件下,它在两周内发生了 3 次。
我检查了笔记本电脑的支持台,他们让我运行了几次测试,看看我的机器是否过热,但没有任何迹象。所以,这里是问题:
我有时会在 Python 中运行一些 CPU 密集型程序,当我不使用任何多处理程序时,我通常将亲和性设置为我的 4 个“核心”之一(Core i5 - 2 个核心和 4 个线程,SMT)并使用优先级“高”。
前 2 次发生时,计算机运行繁重任务超过 24 小时后意外关闭。我正在浏览或做其他事情,一切都消失了。机器比平时热一些,但不是很热。
当我再次打开它时,它表现得好像什么也没发生……只是“Windows 正在启动”或类似的东西。没有一条关于失败的消息!
第三次发生时,该进程在以正常优先级运行 5 分钟后被设置为“实时”。计算机在完成运行任务后大约5 秒关闭(这是一个快速的任务)。
甚至都不热!!
当我再次打开它并试图重现错误时,我不能。因此,在出现此问题之前,笔记本电脑可能应该至少保持一两天...
现在一些有趣的事情:
一些想法:
所以我该怎么做?我可以运行其他测试来查看 CPU 是否有问题?即使我不觉得笔记本电脑变得更热,我也应该放弃过热吗?
我需要在 1 个 CPU 上测试多线程程序的性能,但我有一台双 CPU 机器。我需要为那些共享它们的插槽的逻辑 CPU 设置亲和性,否则它们会从大量 FSB 中受益。我尝试了亲和力 0-7 和 8-15,但结果差异很大,第一个更快。因此我不知道哪个逻辑 CPU 共享它们的套接字。
lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 16
On-line CPU(s) list: 0-15
Thread(s) per core: 1
Core(s) per socket: 8
CPU socket(s): 2
NUMA node(s): 4
Vendor ID: AuthenticAMD
CPU family: 16
Model: 9
Stepping: 1
CPU MHz: 800.000
BogoMIPS: 4000.40
Virtualization: AMD-V
L1d cache: 64K
L1i cache: 64K
L2 cache: 512K
L3 cache: 5118K
NUMA node0 CPU(s): 0-3 …Run Code Online (Sandbox Code Playgroud) 我发现用户级线程比内核级线程快很多,但我找不到任何令人信服的例子来说明为什么用户级线程比内核级线程快?有人可以向我解释一下。
内核级线程速度慢且效率低下。例如,线程操作比用户级线程慢数百倍。
取自这里
我希望能够在命令行中获得每个进程的线程数,并获得与我可以通过活动监视器看到的完全相同的数量。
目前 IntelliJ IDEA 进程(PID 5235)有 266 个线程。我想通过命令行获取这个数字。
我试过了
lsof -p 5235 | wc -l
Run Code Online (Sandbox Code Playgroud)
有什么建议?
当 Android Studio 构建我的项目时,它很容易吃掉我所有的 8 个内核。我希望能够在我的应用程序编译时流畅地浏览互联网。有没有办法可以将 Gradle 的 java 进程设置为低优先级(nice level > 10)?
该解决方案非常适合我的 gentoo 系统(portage 在 niceness 19 上运行,我通常可以在编译时使用我的 PC)。最佳情况下,只有 Gradle 的 java 应该以低优先级运行,因此 Android Studio 本身保持响应。如果这是不可能的,那么将 Gradle 的 Java VM 限制为仅使用 5-7 个内核是否更容易?不过,这可能会导致更长的构建时间。
我手动试验了一下。我在循环中运行了一个脚本,它每秒为所有新的 Java 进程设置良好的 15 级(Windows 用户的“低优先级”)。不幸的是,系统仍然不是很灵敏。我看到在编译期间我的平均负载上升到20,而我只有 4 个(逻辑)内核。这意味着 Gradle 产生了太多线程。我在其他地方读到这些线程也很少屈服,这可能是降低优先级无济于事的原因。
所以,更新的问题是:是否可以限制 Gradle 使用的线程数?
我有一个发送多封电子邮件的软件。
第一个有标题
Message-ID: <153495492389.29001.486258560116169081@server.example.com>
Run Code Online (Sandbox Code Playgroud)
第二个和所有后续的都有标题
In-Reply-To: <153495492389.29001.486258560116169081@server.example.com>
References: <153495492389.29001.486258560116169081@server.example.com>
Run Code Online (Sandbox Code Playgroud)
但这似乎不足以让 Outlook 将这些消息显示为对话,即使启用了显示对话。
有人可以启发我什么是必要的,以便邮件可以在 Outlook 中正确显示为对话吗?
我想知道线程 Web 服务器是什么?
我进行了很多搜索,但找不到任何给出明确解释或定义的内容;也许有人可以启发我。
我听说一个处理器一次只能运行一个进程。这是真的?如果是这样,那么单个进程如何同时在多个处理器中执行呢?这可能吗?
提前致谢!