在tomcat/manager
当我点击find leaks
按钮,我得到以下信息:
以下 Web 应用程序已停止(重新加载、取消部署),但它们之前运行的类仍在内存中加载,从而导致内存泄漏(使用分析器确认):
这实际上给我带来了很大的问题,因为当我需要重新部署应用程序并进行一些更改时,旧版本保留在服务器中,当我尝试使用它时,我得到:
IllegalStateException: Illegal access: this web application instance has been stopped already
Run Code Online (Sandbox Code Playgroud)
即使在 tomcat/manager 中,应用程序显示为已启动。
我该如何解决?我看了here但没有解决问题。我尝试运行jps
命令来获取pid
JVM,但它没有返回 JVM,我猜是由于许可问题。
是否可以以某种方式配置 tomcat,以便在取消部署应用程序时,它不应该在内存中保留该应用程序的任何类?
问题如何在部署新的 .war 文件时清除 tomcat 的缓存?有配置设置吗?没有解决我的问题,因为我按照那里给出的步骤操作:
这些步骤没有解决问题
我有一个应用程序,我apache POI 3.17
在其中创建 Excel 文件apache POI
,当我在Tomcat
. 这是什么意思?我该如何解决?
假设你有以下方法 MyClass
public class MyClas{
public void startWork(){
YourClass.doSomeWork();
//more things to do in this method
}
}
Run Code Online (Sandbox Code Playgroud)
和YourClass看起来像这样:
public class YourClass{
public static void doSomeWork(){
// a lot of work to do here
// maybe even invoke other methods in some other classes
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想知道是在代码YourClass.doSomeWork();
中执行的startWork()
方法,将脚本继续下一行相同的方法,或者等到doSomeWork()
在YourClass
完成它的执行?
请注意,doSomeWork()
不会返回任何内容.