我在我的Ubuntu 10.04桌面上安装了Eclipse Helios SR1,我不得不使用大量的Web项目.
当我导入项目时,eclipse成功构建了工作区,但它总是不断消耗100%的CPU.
在检查了可能发生的事情之后,我发现在Eclipse的进度选项卡中有几个无穷无尽的任务:
这些任务似乎永远不会结束,使我的Eclipse无法使用.
我怀疑这是一个内存问题,我在这台机器上有2GB,Eclipse的堆大小不会超过350MB,而Xmx目前设置为1024MB.
还尝试使用不同的VM版本运行Eclipse:Sun的1.6,Sun的1.5和Open JDK 1.6.没有变化.
我有一个Athlon X2 2.2GHz处理器和7200转三星硬盘.
源代码通过SVN共享.
有没有人知道会发生什么?
这是我的eclipse.ini以防万一:
-startup
plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.1.R36x_v20100810
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-XX:MaxPermSize=256m
-Xms40m
-Xmx1024m
-Djava.library.path=/usr/lib/jni
Run Code Online (Sandbox Code Playgroud)
非常感谢.
我一直在测试.NET C#应用程序使用资源(如CPU或内存)的方式.我写了一些循环来计算大量数字的值,我对算法的权重感到满意.
我有一个四核2.4 GHz处理器,但我注意到在任务管理器中,我的应用程序只使用了我的CPU的25%.为什么不使用100%?这是否意味着在VS 2008中编译的.NET C#应用程序仅支持单核CPU?或者有没有办法可以强制它使用所有的CPU?
在我公司,我们经常在CPU压力下测试USB和FireWire设备的性能.
我们运行的测试代码可以加载CPU,它通常用于非常简单的非正式测试,以查看设备性能的变化.
我看了一下这个代码,它是一个简单的循环,它递增一个计数器并根据新值进行计算,将这个结果存储在另一个变量中.
运行单个实例将使用CPU的1/X,其中X是核心数.
因此,例如,如果我们使用的是8核PC,并且我们希望看到我们的设备如何在50%的CPU使用率下运行,我们可以同时打开四个这样的实例,依此类推......
我在想:
是什么决定了CPU耗尽了多少?它是否只是在单线程应用程序中的单个线程上以尽可能快的速度运行所有内容?
有没有办法自愿限制程序可以使用的最大CPU使用率?我可以想到一些"草率"的方式(添加睡眠命令或其他东西),但有没有办法限制说,某些指定百分比的可用CPU或什么?
有没有办法同时设置流程的良好价值及其亲和力?例如:
taskset -c 0,1 nice -20 proc
Run Code Online (Sandbox Code Playgroud)
更新:它的工作原理如下.我认为必须要有一些更复杂的东西.
有没有人遇到过这个?我有一个带有 SQL Server 2012 SP1 的两节点集群,企业企业版安装在 Windows 2012 上。这些是在 VMWare 5.1 上运行的 VM。我注意到 CPU 偶尔会一路飙升至 100% 并持续一段时间。当我查看使用那么多 CPU 的原因时,结果发现是资源监视器。我知道当虚拟内存不足 (KB 968722) 时,SQL Server 2008 存在 CPU 使用率高的问题,但它已在服务包中修复。
有没有人在 SQL Server 2012 SP1 中看到同样的事情?这与 KB 968722 中提到的情况完全相同,但它发生在 SQL Server 2012 上,而不是 SQL Server 2008。
我目前正在运行一些JMeter测试来测试Web服务的性能.它使用了非常高的CPU.对于一个JMeter请求线程,它使用10-30%的任何位置(取决于请求的类型).当我将其提升到仅仅15个线程时,我获得了~95%的CPU利用率.当然,我想知道发生了什么.我做了一个Hprof CPU示例(我尝试了时间选项但是花了一个半小时来启动我的服务并且没有消息会通过).以下是该抽样结果的片段(跨度超过15分钟).
CPU SAMPLES BEGIN (total = 220846) Fri Aug 22 13:38:54 2014 rank self accum count trace method 1 14.96% 14.96% 33038 300514 java.net.PlainSocketImpl.socketAccept 2 14.84% 29.80% 32776 301258 sun.nio.ch.EPollArrayWrapper.epollWait 3 12.45% 42.26% 27505 313002 sun.nio.ch.EPollArrayWrapper.epollWait 4 7.48% 49.73% 16517 300604 java.net.PlainSocketImpl.socketAccept 5 7.18% 56.91% 15856 303203 sun.nio.ch.EPollArrayWrapper.epollWait 6 6.18% 63.09% 13639 313001 sun.nio.ch.ServerSocketChannelImpl.accept0 7 6.04% 69.13% 13329 304259 sun.nio.ch.EPoll.epollWait 8 5.11% 74.23% 11275 307102 sun.nio.ch.EPollArrayWrapper.epollWait
以及那些顶级样本的相应堆栈:
TRACE 300514:
java.net.PlainSocketImpl.socketAccept(:Unknown line)
java.net.AbstractPlainSocketImpl.accept(:Unknown line)
java.net.ServerSocket.implAccept(:Unknown line)
java.net.ServerSocket.accept(:Unknown line)
sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(:Unknown line) … 我正在创建一种在多个服务器上发送和接收数据的机制.服务器在Windows上运行,使用Delphi 7.
发送数据是在几个同时的线程中形成的,并且不可能首先知道哪个线程将形成数据.将数据添加到缓冲区的时刻由CriticalSection同步.发送线程不断检查是否有任何新数据要发送.通过这样做,每个线程吃掉1个CPU核心.这种方法非常快,但即使服务器没有发送数据,CPU也大约为100%.我需要多个线程,我需要避免这种高CPU使用率.
我尝试了两种选择:
睡眠 - 如果缓冲区中没有数据,则运行睡眠(1).CPU内核未加载,但对新数据的响应速度大约低100倍.这不是解决方案.
杀死和创建线程.如果缓冲区中没有数据,我会杀死该线程.添加数据的函数将创建一个新线程.新线程将发送数据,释放缓冲区并再次被杀死.CPU负载减少但创建和终止需要花费太多时间.结果,速度降低了100倍.
有没有替代睡眠(1)不消耗100%CPU并迅速做出反应?或者是否可以在某些事件发生之前暂停线程?
问题得到了回答.这适用于我/sf/answers/308106361/.
我正在试验nodejs工作线程的使用。我遇到了奇怪的延迟时间。
main.js可以产生一系列快速工作线程的线程。worker.js执行一次 cpu-boud 计算(生成素数);顺便说一句,
generatePrimes()javascipt 函数只是 cpu-bound 计算的演示示例。在我的真实案例中,工作线程是一个绑定 c++ 库的 Nodejs 程序(进行语音识别,在 100% CPU 的情况下进行半秒)。
我的笔记本电脑:Ubuntu 20.04.2 LTS桌面环境,有8个核心:
$ inxi -C -M
Machine: Type: Laptop System: HP product: HP Laptop 17-by1xxx v: Type1ProductConfigId serial: <superuser/root required>
Mobo: HP model: 8531 v: 17.16 serial: <superuser/root required> UEFI: Insyde v: F.32 date: 12/14/2018
CPU: Topology: Quad Core model: Intel Core i7-8565U bits: 64 type: MT MCP L2 cache: 8192 KiB Speed: 700 MHz min/max: 400/4600 …Run Code Online (Sandbox Code Playgroud)我正在尝试将项目从 .NET Framework 4.7.2 迁移到 .NET 5,但我的程序的性能显着下降。该程序的部分内容利用并行性在具有 96 个内核和 192 个逻辑处理器(分布在 4 个 CPU 组中)的服务器上进行批量操作。
我在安装了 .NET 5 Runtime(未安装 .NET 5 SDK)的 Windows Server 2016 上运行该程序。该项目是用 F# 5.0 编写的。
在 .NET Framework 4.7.2 中,我们使用以下app.config文件成功地使程序在所有 192 个逻辑处理器上运行,实现了约 98% 的 CPU 利用率:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<Thread_UseAllCpuGroups enabled="true" />
<GCCpuGroup enabled="true" />
<gcServer enabled="true" />
<gcAllowVeryLargeObjects enabled="true" />
</runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)
迁移到 .NET 5(以及扩展 .NET Core)后,CPU 利用率下降,并且我无法再次提高它。
根据微软自己的文档, app.config不用于配置.NET Core项目,而是用[appname].runtimeconfig.json. runtimeconfig.template.json为了适应这一变化,我在我的项目中添加了:
{
"configProperties": {
"System.GC.CpuGroup": …Run Code Online (Sandbox Code Playgroud) 我的 Dockerfile 执行RUN npm run build命令。当我docker build在 t2.micro EC2 实例上执行命令时,实例冻结并且不响应(我什至无法使用 ssh 连接)。当我监控CPU使用率时,我可以看到CPU使用率达到了最高水平。因此,我尝试使用--max_semi_space_size=1和--max_old_space_size=198参数来限制内存使用,但它不起作用。
如果我可以为 docker build 命令设置 CPU 使用限制,我认为它可能会起作用。有人能帮我吗?
我知道,如果我增加 EC2 实例的 vCPU 数量,那么我可以毫无问题地构建我的应用程序,但由于它是一个演示项目,我尝试将其部署在免费层上。
Dockerfile:
FROM node:16-alpine
COPY . .
# Install dependencies
RUN node \
--max_semi_space_size=1 \
--max_old_space_size=198 \
$(which npm) ci
# Build the app
RUN node \
--max_semi_space_size=1 \
--max_old_space_size=198 \
$(which npm) run build
EXPOSE 3000
# Start the app
CMD [ "npx", "serve", "build" ]
Run Code Online (Sandbox Code Playgroud) cpu-usage ×10
performance ×4
linux ×2
node.js ×2
.net ×1
.net-5 ×1
.net-core ×1
asynchronous ×1
bash ×1
c# ×1
c++ ×1
delphi ×1
docker ×1
docker-build ×1
eclipse ×1
f# ×1
indexing ×1
java ×1
jmeter ×1
jsp ×1
linux-kernel ×1
npm-run ×1
process ×1
thread-sleep ×1