如何优化 JVM 以利用更少的资源
我使用 Apache tomcat 7.02 作为服务器。我使用 sphinx4 创建了一个应用程序并将其部署在 apache tomcat 服务器上。由于这个 Sphinx4 应用程序需要大量内存来执行。因此为此目的,我分配了大量内存作为 java 堆空间(导出CATALINA_OPTS =“-Xms1536m -Xmx1536m”)。我部署的服务器是一个 64 位系统,上面装有 Debian Lenny,还有 2Gb RAM。我创建了一个 Servlet,向其中发布数据,获取结果...当我为 10 个用户运行它时,大约需要 8 分钟来处理,但如果我同时为 100 个用户运行它,那么它会在 tomcat 状态上显示这一点
可用内存:37.0 MB 总内存: 1484.81 MB 最大内存:1484.81 MB
我也尝试过使用 System.gc(),但它没有 gud。那么有什么方法可以检查 JVM 的内存状态并在需要时释放它?
I am using Apache tomcat 7.02 as a server.I created an application using sphinx4 and deployed it on apache tomcat server.Since this Sphinx4 application requires a lot of memory to execute.So for that purpose i alloted lot of memory as java Heap space(export CATALINA_OPTS="-Xms1536m -Xmx1536m"). The Server on which i have deployed the server is a 64bit System with Debian Lenny on it,along with 2Gb of RAM. I created a Servlet,post data to it,get the results... When i run it for 10 users it takes about 8 minutes to process but if i run it for 100 users simultaneously,thn it shows this on tomcat status
Free memory: 37.0 MB Total memory:
1484.81 MB Max memory: 1484.81 MB
I also tried using System.gc(),but it did no gud.So is there any way through which i can check the memory status of JVM and free it when needed?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要确定资源的使用位置。我建议您使用内存分析器并更改程序以消耗更少的内存。
如果您使用的是 64 位 JVM,您可以使用
-XX:+UseCompressedOops
来减少内存消耗(它使用 32 位引用而不是 64 位引用)编辑:如果您无法调整您的应用程序可能值得考虑升级您的服务器。 24 GB 服务器的成本约为 1,800 英镑,并且可能允许您在不更改代码的情况下扩展到 1000 个用户。 ;)
You need to determine where resources are being using. I suggest you use a memory profiler and change the program to consume less memory.
If you are using a 64-bit JVM you can use the
-XX:+UseCompressedOops
to reduce memory consumption (it uses 32-bit references instead of 64-bit references)EDIT: If you cannot tune your application it may be worth considering upgrading your server. A 24 GB server can cost around £1,800 and might allow you to scale to 1000 users without a code change. ;)