问题标签 [cpu]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winapi - Win32:计算多核/多处理器系统中的线程 CPU 利用率
我目前正在开发一个需要了解 CPU 利用率的 MFC 应用程序。它可能在不同的时间点有多个线程,但大部分工作都是由主线程完成的。
我正在尝试找到一种方法来计算该主线程使用的 CPU 百分比。但是,我遇到了一些问题,即如何在多 CPU / 多核环境中准确地完成此任务。问题是大多数系统调用似乎都提供了系统信息,而我需要特定于我的主线程正在其上执行的处理器的信息。
我看过 WMI,但它似乎对这项任务来说太过分了。GetThreadTimes() 能满足我的需要吗?
windows - 32 位和 64 位进程之间的 memcpy 性能差异
我们有带 XP64 的 Core2 机器(戴尔 T5400)。
我们观察到,在运行 32 位进程时,memcpy 的性能在 1.2GByte/s 量级;然而,在 64 位进程中的 memcpy 可以达到大约 2.2GByte/s(或使用 Intel 编译器 CRT 的 memcpy 可以达到 2.4GByte/s)。虽然最初的反应可能只是将其解释为由于 64 位代码中可用的寄存器更广泛,但我们观察到我们自己的类似 memcpy 的 SSE 汇编代码(应该使用 128 位宽的加载存储,而不管 32 /64 位进程)展示了它实现的复制带宽的类似上限。
我的问题是,这种差异实际上是由什么引起的?32 位进程是否必须跳过一些额外的 WOW64 箍才能获得 RAM?它与 TLB 或预取器有关还是......什么?
感谢您的任何见解。
也在英特尔论坛上提出。
c# - C# 程序能否以某种方式测量其自身的 CPU 使用率?
我正在开发一个将运行很长时间的后台程序,并且我有一个外部日志记录程序(SmartInspect),我想定期提供一些值,以便在调试时实时监控它。
我知道我可以简单地启动多个程序,例如任务管理器或 IARSN TaskInfo,但我想为此将所有内容保留在我自己的程序中,因为我还想添加一些简单的规则,例如程序是否使用超过X% CPU,在日志中标记这个。
我有一个后台线程,它会定期向 SmartInspect 提供一些统计信息,例如内存消耗、工作集等。
该线程是否有可能对它消耗的计算机 CPU 资源量进行合理准确的测量?主程序是一个单线程应用程序(除了记录统计信息的看门狗线程),因此如果一项技术仅限于单个线程使用多少,那也很好。
我发现了一些与Linux 和 C 的rusage相关的条目。我可以使用类似的东西吗?
编辑:好的,我尝试了性能计数器的方式,但每次调用它都会添加相当多的 GC 数据,因此内存使用和垃圾收集的图表猛增。我想我现在就把这部分放在一边。
python - 如何在 Python 中获取当前的 CPU 和 RAM 使用情况?
在 Python 中获取当前系统状态(当前 CPU、RAM、可用磁盘空间等)的首选方式是什么?unix 和 Windows 平台的奖励积分。
似乎有几种可能的方法可以从我的搜索中提取它:
使用诸如PSI之类的库(目前似乎没有积极开发并且在多个平台上不受支持)或类似pystatgrab 之类的东西(自 2007 年以来似乎没有任何活动,并且不支持 Windows)。
使用特定于平台的代码,例如
os.popen("ps")
在 *nix 系统中使用 a 或类似代码,在 Windows 平台上使用MEMORYSTATUS
inctypes.windll.kernel32
(参见ActiveState 上的这个秘籍)。可以将 Python 类与所有这些代码片段放在一起。
并不是说这些方法不好,而是已经有一种得到良好支持的多平台方法来做同样的事情?
windows - 针对行为不端的 ColdFusion 应用程序的 Windows CPU 通知
我有一个用 ColdFusion 编写的 Web 应用程序,它会定期启动 100% 的服务器 CPU 并导致 ColdFusion 服务崩溃。
由于我自己无法重现该问题,我想找到一个实用程序,它会在 CPU 使用率开始攀升时通过电子邮件通知我,这样我就可以跳上服务器,查看 FusionReactor 看看发生了什么,并识别行为不端的代码。
我已经用 Google 搜索过,但找不到合适的实用程序,所以我想问问其他程序员是否找到了可以进行这种监视的工具。鉴于我的具体需求,我不想编写自己的监控工具。
如果您对解决整体问题有其他建议,我也很乐意听到这些建议。
对答案的回应:
使用 Windows perfmon 触发命令行听起来很有希望。任何人都可以向我指出如何做到这一点的教程吗?
我们没有设置用于接收 SNMP 陷阱的监控系统。
我们正在运行 ColdFusion 8 标准版,它不包括 ColdFusion 性能监控工具——只有 Enterprise 包括那些。
Peter Boughton 的回答可能会让我解决问题,但它并不能帮助我在 CPU 开始飙升时主动解决问题,所以我仍在寻找通知解决方案。
winapi - VISTA 中的 Win32 控制台进程 - 10% CPU,但非常慢
我有一个 Win32 控制台应用程序,它正在执行一些计算,在 Compaq Visual Fortran 中编译(这可能无关紧要)。
我需要同时运行很多。
在 XP 中,它们一起占用大约 90-100% 的 CPU,工作速度非常快。在 Vista 中,无论我运行多少个,它们占用的 CPU 都不会超过 10%(一起),并且分别运行得很慢。
有相当多的控制台输出正在进行,但现在非常多。我可以最小化所有的窗口,它没有帮助。CPU基本上什么都不做...
有任何想法吗?
更新:
不,这些是不同的机器,但它们运行相对相同的硬件。2. 不使用线程,这是一个非常古老(20 年)的 DOS 普通应用程序,在 win32 中编译。它应该计算迭代直到它们相遇,消耗它所拥有的一切。我的印象 - VISTA 只是没有给它更多的 CPU
macos - 禁用核心如何影响正在运行的进程?
我在我的 Macbook Pro 上安装了这个应用程序,它允许我禁用 CPU 上的核心。这让我想知道:禁用核心如何影响正在运行的进程?
如果禁用核心对以下内容有影响,我也很感兴趣
- 电池寿命
- 发热
- 当处理器通常使用少于 40% 的两个内核时提高性能?
java - 在 Java 中生成 CPU 负载
我正在进行一些吞吐量测试。我的申请必须
- 从 JMS 读取
- 做一些处理
- 写入 JMS
我的目标是模拟#2,“一些处理”。也就是说,在转发事件之前引入延迟并占用 CPU 一段给定的时间(例如 500 毫秒)。
天真的方法是Thread.sleep(500)
. 这将在执行中引入正确的延迟,但不会使用 CPU。
计算斐波那契数是一种选择。 有没有人使用任何有趣的技术来让 CPU 在给定时间内保持忙碌?
理想的特征是:
- 执行各种指令,而不是(例如)只是循环旋转
- HotSpot VM 不会优化到零
- 有一种简单的方法可以向上或向下调整处理周期(完成时间会因硬件而明显不同)
c++ - 如何在不占用 CPU 的情况下进行大量处理?
我知道问题标题不是最好的。让我解释。
我进行了大量的文本处理,将自然语言转换为 xml。这些文本文件上传速度相当快并被放入队列中。从那里它们被一个接一个地拉到后台工作程序中,该工作程序调用我们的解析器(使用 boost spirit)将文本转换为 xml 并将相关部分加载到我们的数据库中。
解析器一次可以做大约 100 个。我在后台工作人员上有限速器,现在只经常轮询我们的队列,因此它的执行速度不那么快。我现在不能抛出一个以上的后台工作人员,因为我的 http 请求开始下降——后台工作人员和网络服务器存在于同一台机器上,我相信这是因为 cpu 使用率达到 80-95%,尽管我们也可以使用更多的内存。
我需要更好地扩展它。你会怎么做呢?
在回答几个问题时:
我们使用亚马逊网络服务,因此购买廉价的额外硬件与生成一个新的亚马逊实例有点不同——也许有人做了一些代码来自动生成负载量的实例?
我们确实有一个 http 服务器,它只是将我们的文件塞入一个队列,所以它受到影响的唯一原因是因为 cpu 正忙于处理大量与解析相关的东西
我已经对我们的后台工作人员进行了速率限制,尽管我们没有在解析器本身中使用它
我还没有尝试过,但我过去使用过它——我需要为此写下一些基准
解析器与 Web 服务器完全分离——我们有 nginx/merb 作为我们的 Web/应用程序服务器和一个调用 c++ 的 rake 任务作为我们的后台工作者——但它们确实存在于同一台机器上
linux - 将某些进程限制为 CPU % - Linux
我有以下问题:一些动态生成的进程倾向于占用 100% 的 CPU。我想将所有匹配某些标准(例如进程名称)的进程限制为一定数量的 CPU 百分比。
我要解决的具体问题是利用 fold@home 工作进程。我能想到的最佳解决方案是定期执行并使用 cpulimit 实用程序来限制进程的 perl 脚本(如果您对更多详细信息感兴趣,请查看此博客文章)。它有效,但它是一个黑客:/
有任何想法吗?我想把进程的处理留给操作系统:)
再次感谢您的建议,但我们仍然没有抓住重点:)
“slowDown”解决方案本质上是“cpulimit”实用程序所做的。我仍然需要注意要减慢哪些进程,一旦工作进程完成就终止“slowDown”进程,并为新的工作进程启动新进程。这正是我使用 Perl 脚本和 cron 作业所做的。
主要问题是我事先不知道要限制哪些进程。它们是动态生成的。
也许有一种方法可以将一个用户的所有进程限制在一定的 CPU 百分比?我已经设置了一个用户来执行 fold@home 作业,希望我可以使用 /etc/security/limits.conf 文件来限制他。但我能得到的最接近的是每个用户的总 CPU 时间......
如果有一些东西可以让你说:“这个用户进程的所有 CPU % 使用率的总和不能超过 50%”,那就太酷了。然后让进程根据它们的优先级争夺那 50% 的 CPU...
伙计们,感谢您的建议,但这与优先级无关-即使有足够的可用 CPU 时间,我也想限制 CPU 百分比。这些进程已经是低优先级,因此它们不会导致任何性能问题。
我只是想防止 CPU 长时间以 100% 运行...