用您喜欢的语言编写代码,让Windows任务管理器代表CPU使用历史中的正弦波.
这是来自微软中国的技术访谈测验.我认为这是一个很好的问题.特别值得了解候选人如何理解并找出解决方案.
编辑:如果可能涉及多核(cpu)案例,这是一个好点.
我需要一些易于实现的单CPU和内存密集型计算,我可以在java中为测试线程调度程序编写.
它们应该耗费一些时间,但更重要的是消耗资源.
有任何想法吗?
运行我的应用程序会导致我的手机上CPU使用率降低约40%:
final String position = String.format("%02d:%02d:%02d", time.getHours(), time.getMinutes(),
time.getSeconds());
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
c.mTxtPosition.setText(position);
...
Run Code Online (Sandbox Code Playgroud)
通过注释掉setText方法,CPU使用率下降到~4%的预期水平.该方法每秒调用一次并刷新ImageViews,CustomViews ...而不会导致相同的负载过量.除了CPU使用率之外,dalvik通过调用setText()不断报告大约10-1000个对象的垃圾收集.
创建这样的跟踪文件:
Debug.startMethodTracing("setText");
c.mTxtPosition.setText(position);
Debug.stopMethodTracing();
Run Code Online (Sandbox Code Playgroud)
traceview按以下各自的CPU%列出以下方法作为前5名:
有人对此有解释吗?
我现在正在调试一个程序,每个外部进程有两个线程,这两个线程继续使用while ((i = in.read(buf, 0, buf.length)) >= 0)循环读取Process.getErrorStream()和Process.getInputStream().
有时,当外部进程因JVM崩溃而崩溃时(请参阅这些hs_err_pid.log文件),那些读取该外部进程的stdout/stderr的线程开始消耗100%的CPU并且永远不会退出.循环体没有被执行(我在那里添加了一个日志语句),所以无限循环似乎在本机方法中java.io.FileInputStream.readBytes.
我在Windows 7 64位(jdk1.6.0_30 64位,jdk1.7.0_03 64位)和Linux 2.6.18(jdk1.6.0_21 32位)上重现了这一点.有问题的代码在这里,就像这样使用.请参阅这些链接以获取完整代码 - 以下是有趣的内容:
private final byte[] buf = new byte[256];
private final InputStream in;
...
int i;
while ((i = this.in.read(this.buf, 0, this.buf.length)) >= 0) {
...
}
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪看起来像
"PIT Stream Monitor" daemon prio=6 tid=0x0000000008869800 nid=0x1f70 runnable [0x000000000d7ff000]
java.lang.Thread.State: RUNNABLE
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(FileInputStream.java:220)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
- locked …Run Code Online (Sandbox Code Playgroud) 我有点担心我可以在共享机器中使用的资源量.有没有办法测试管理员是否有我可以使用的资源量限制?如果是,为了提出更完整的问题,我该如何设置这样的限制?
谢谢.
我正在环顾redis,为我提供一个中间缓存存储,其中包含很多围绕集合操作的计算,例如intersection和union.
我查看了redis网站,发现redis不是为多核CPU设计的.我的问题是,为什么会这样?
此外,如果是,我们如何在多核CPU上使用redis 100%利用CPU资源.
我正在尝试构建一个在一致条件下运行代码片段的系统,并且我认为可行的一种方法是在具有相同布局的docker容器中运行各种程序,保留相同数量的内存等.但是,我似乎无法弄清楚如何保持CPU使用率一致.
我能找到的最接近的东西是"cpu shares",如果我理解文档,就会限制cpu使用与系统上运行的其他容器/其他进程有关,以及系统上可用的内容.它们似乎无法将容器限制为绝对的cpu使用量.
理想情况下,我想设置仅限于使用单个cpu核心的docker容器.这是可能吗?
Docker提供了一个交互式stats命令,docker stats [cid]它提供了有关CPU使用情况的最新信息,如下所示:
CONTAINER CPU % MEM USAGE/LIMIT MEM % NET I/O
36e8a65d 0.03% 4.086 MiB/7.798 GiB 0.05% 281.3 MiB/288.3 MiB
Run Code Online (Sandbox Code Playgroud)
我试图以可消化的格式将CPU使用率作为百分比来进行一些分析.
我已经看到/ sys/fs中的统计信息似乎提供了与Docker Remote API类似的值,它给了我这个JSON blob:
{
"cpu_usage": {
"usage_in_usermode": 345230000000,
"total_usage": 430576697133,
"percpu_usage": [
112999686856,
106377031910,
113291361597,
97908616770
],
"usage_in_kernelmode": 80670000000
},
"system_cpu_usage": 440576670000000,
"throttling_data": {
"throttled_time": 0,
"periods": 0,
"throttled_periods": 0
}
}
Run Code Online (Sandbox Code Playgroud)
但我不确定如何从中获得精确的CPU使用率百分比.
有任何想法吗?
不知何故,我从Visual Studio诊断工具中丢失了实时图表.下面是我当前的调试屏幕,显示我看不到内存和CPU使用情况的实时图表:
在哪里我正在寻找这个:
我尝试在以下地方进行在线探索:
有谁知道如何启用内存和CPU使用情况实时图表?
cpu-usage visual-studio visual-studio-debugging debug-diagnostic-tool
我有一个运行Windows 2008 R2的微EC2实例.我最近收到了很多高CPU警报,当我登录AWS管理控制台时,我发现我的CPU几乎与100%挂钩.但是,如果我登录到实例并启动任务管理器,我的CPU看起来几乎是空闲的.我已经离开任务管理器一段时间,并使用此屏幕截图显示AWS报告与我的实例看起来正在做什么之间的差异.建议?
(https://s3.amazonaws.com/caskerdbbucket/public/cpu.png)
PS:任务管理器的更新速度设置为"低"
cpu-usage ×10
docker ×2
java ×2
amazon-ec2 ×1
android ×1
containers ×1
cpu ×1
jedis ×1
jvm ×1
linux ×1
lxc ×1
pam ×1
redis ×1
trigonometry ×1
windows ×1