我是新来的,我在 CPU 消耗和多线程方面不是很好。但我想知道为什么我的网络应用程序消耗了太多的 CPU 进程?我的程序所做的是在后台更新值,这样用户就不必等待数据的处理,而只需要根据请求获取它。更新过程是使用执行程序库的计划任务,它每 5 秒触发 8 个线程来更新我的数据。
现在我想知道为什么我的应用程序消耗了太多的 CPU。是因为代码不好还是因为服务器规格低?(2 个内核,2 个数据库和 1 个主要应用程序与我的 Web 应用程序一起运行)
非常感谢您的帮助。
我是新来的,我在 CPU 消耗和多线程方面不是很好。但我想知道为什么我的网络应用程序消耗了太多的 CPU 进程?我的程序所做的是在后台更新值,这样用户就不必等待数据的处理,而只需要根据请求获取它。更新过程是使用执行程序库的计划任务,它每 5 秒触发 8 个线程来更新我的数据。
现在我想知道为什么我的应用程序消耗了太多的 CPU。是因为代码不好还是因为服务器规格低?(2 个内核,2 个数据库和 1 个主要应用程序与我的 Web 应用程序一起运行)
非常感谢您的帮助。
保罗,
这里的人不可能说问题是您的代码效率低下还是服务器不符合规范。它可能是其中之一或两者,或其他东西。
你需要自己做一些研究:
分析代码。这将允许您确定您的 web 应用程序大部分时间都花在了哪里。
查看可供您使用的操作系统级别的统计信息。这可能会告诉您真正的问题是内存使用或磁盘 I/O。
看看后端数据库的性能。是不是占用了很多CPU?
一旦您确定了 CPU 正在使用的区域,您需要找出问题的真正原因并找出解决方法。一旦你实现了一个潜在的修复,你可以重新运行你的分析等,看看它是否有帮助。
您需要分析您的应用程序以找出 CPU 的实际消耗位置。Java 内置了一些基本的分析方法,或者如果您的环境允许,您可以运行内置的“hprof”编译器:
java -Xrunhprof ...
(实际上,您可能想要设置一些额外的选项:谷歌“hprof”了解更多详细信息。)
后者原则上更容易,但我提到了添加您自己的分析例程的可能性,因为它更灵活,并且您可以在运行另一个分析器更麻烦的 Servlet 环境中执行此操作。