为什么Tomcat reloadable = true导致CPU 100%?

时间:2018-12-09 22:42:18

标签: tomcat

在开发模式下,我需要热装。我以前使用过各种语言,例如PHP,Node.js,甚至Go lang,所有语言都支持热重载,零问题。但是仅在Tomcat中,如果设置reloadable=true,它将导致CPU 100%。在他们的正式文件中,它说Catalina将“监视”类文件的更改,因此您不应将其视为真实。但是,当然,我需要将其设置为true,否则一旦类文件更改,如何重新部署?为什么监视会导致CPU 100%?我设置错了吗?谢谢!

1 个答案:

答案 0 :(得分:1)

Java Tomcat运行的机制不同于PHP。为了获得最佳性能,Java会将所有类文件加载到内存中,因此它将不知道磁盘上的文件是否更改。要监视此类更改,它需要经常读取磁盘并比较每个文件的校验和,如果发现差异,则将新文件加载到内存中,这会消耗大量磁盘I / O并导致CPU 100%占用。对于PHP,这很简单,PHP不会在内存中加载每个.php文件,而是按需加载它们,这在某些情况下可能会很慢,但是非常适合处理文件更改。我相信这是主要区别。

所以结论是:永远不要对Tomcat使用reloadable=true