【问题标题】:Java Web App has a high rate of CPU consumptionJava Web App 的 CPU 消耗率很高
【发布时间】:2012-05-19 04:57:24
【问题描述】:

我是新来的,我在 CPU 消耗和多线程方面不是很好。但我想知道为什么我的网络应用程序消耗了太多的 CPU 进程?我的程序所做的是在后台更新值,这样用户就不必等待数据的处理,而只需要根据请求获取它。更新过程是使用执行程序库的计划任务,每 5 秒触发 8 个线程来更新我的数据。

现在我想知道为什么我的应用程序占用了过多的 CPU。是因为代码不好还是因为服务器规格低? (2 个内核,2 个数据库和 1 个主要应用程序与我的 Web 应用程序一起运行)

非常感谢您的帮助。

【问题讨论】:

  • 除非你解释这 8 个线程在做什么,否则这几乎是不可能的?多少计算?多少IO?也许显示一个小代码示例?
  • 这可能是我最近看到的最晦涩的问题之一
  • 嘿,downvoters,你能解释一下你为什么这样做吗?这个问题是合法的。是的,它没有得到很好的解释,但请耐心等待。这是新用户,他将学习如何提出好问题。不要从一开始就惩罚他!
  • 我同意 AlexR 的观点。这个问题很幼稚,但是如果人们不准备回答他,那么处于 OP 职位/经验的人如何学会提出非幼稚的问题。
  • 如果我的问题很幼稚,我很抱歉。我将尝试提供我的代码的一些 sn-ps。我现在只能说,所有 8 个线程都在查询一个负载非常大的数据库(每个表有数百万个事务),然后加密和解密数据。我并不是真的在寻找任何明确的答案,而是更多关于 2 核服务器如何在非常繁忙的环境中执行的信息。谢谢。

标签: java linux multithreading processors


【解决方案1】:

您需要分析您的应用程序以找出 CPU 实际消耗的位置。 Java has some basic profiling methods built in,或者如果您的环境允许,您可以运行内置的“hprof”编译器:

java -Xrunhprof ...

(实际上,您可能想要设置一些额外的选项:谷歌“hprof”了解更多详情。)

后者原则上更容易,但我提到了添加您自己的分析例程的可能性,因为它更灵活,您可以这样做,例如在 Servlet 环境中运行另一个分析器更加麻烦。

【讨论】:

  • 我会在我们的开发环境中尝试这个。虽然让我烦恼的是,在我们的任何环境中,它都不会消耗太多的 CPU 进程。但是在我们的客户环境中,它是.. 2 核 vs 4 核..
  • 嗯,不同的配置可能会“改变事物的平衡”,因此在一个环境中您会看到在另一个环境中不明显的 CPU 瓶颈。这就是为什么我个人喜欢在实时代码中嵌入“实时”分析功能的原因,这样您就可以看到实际发生了什么,而不是根据完全不同的设置进行事后猜测。
【解决方案2】:

保罗,

这里的人不可能说问题是您的代码效率低下还是服务器不符合规范。它可以是其中之一或两者,或其他。

你需要自己做一些研究:

  • 分析代码。这将允许您确定您的 web 应用程序大部分时间都花在了哪里。

  • 查看可供您使用的操作系统级别的统计信息。这可能会告诉您真正的问题是内存使用或磁盘 I/O。

  • 查看后端数据库的性能。是否占用大量 CPU?

一旦您确定了 CPU 正在使用的区域,您就需要找出问题的真正原因并找出解决方法。一旦你实施了一个潜在的修复,你可以重新运行你的分析等,看看它是否有帮助。

【讨论】:

  • 好吧,我忘了提这个,但是数据库消耗的比我的应用程序多得多。但是在对每个进程进行计时之后,完成每个任务的速度很快。虽然还没有分析它..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-22
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多