【发布时间】:2018-10-10 13:48:00
【问题描述】:
我正在使用 java 1.8.0_05,Java HotSpot(TM) 64 位服务器虚拟机 我在 tomcat 8.0.43 上运行一个 java web 应用程序
我最近部署了我的 .war 文件,方法是将其放到 webapps 文件夹中。
这导致记录以下消息:
Java HotSpot(TM) 64 位服务器虚拟机警告:CodeCache 已满。编译器 已被禁用。 Java HotSpot(TM) 64 位服务器虚拟机警告:尝试 使用 -XX:ReservedCodeCacheSize= 增加代码缓存大小 CodeCache: size=245760Kb used=244058Kb max_used=244079Kb free=1701Kb 界限 [...] total_blobs=48344 nmethods=47669 适配器=584 编译:禁用 (没有足够的连续可用空间)
如何检查编译器的当前状态,看看它是否仍然被禁用?
如何启用编译器?我可以简单地重启tomcat吗?
我的应用程序的运行方式似乎没有任何明显的不同(例如:在速度方面)。
有趣的是,将相同的应用程序部署到相同的服务器时,我没有收到此消息。这就是为什么我想首先重新打开编译器,而不是按照消息的建议更改设置(例如:ReservedCodeCacheSize)。
然后,如果问题仍然存在,我可以查看需要更改哪些设置。
【问题讨论】:
-
对不起,我错过了你解释你已经将它部署在同一台服务器上的部分。你确定它们是一样的吗?您是否查看了代码缓存大小?也许用 VisualVM 监控两台服务器是个好主意。另外,要考虑到应用程序的使用会导致缓存加载。也许另一台服务器没有相同的负载?
-
谢谢!如果应用程序在 Linux 服务器上运行,您是否有关于如何运行 VisualVM 的良好资源?我必须远程运行它吗?
-
是的。我已经更详细地编辑了我的答案。
-
Update 5 已经很老了(4.5 年)。我会尝试更新 181。
-
非常感谢。你认为这是造成问题的原因吗?会不会是我的代码做错了?因为据我了解,典型的应用程序不会遇到这个问题,而且我的应用程序也不是特别大......