如果scratchdir是只读的,Tomcat是否在内存中缓存编译的JSP页面



我在只读文件系统上的Tomcat容器中安装了一个web应用程序。因此,我在启动时看到这条消息(实际名称更改以保护有罪):

严重:您指定的scratchDir:/readonlyfs/tomcat/work/Catalina/localhost/myApp不可用

尽管有此消息,应用程序似乎仍在运行,而且很难确定,但似乎并没有为每次访问编译JSP页面。那么,我的问题是,编译后的JSP页面发生了什么?它们缓存在内存中吗?它们是否被无限期缓存?它们被缓存了吗?

我需要明确地知道,因为应用程序几乎总是部署到只读文件系统,如果这会导致性能问题,那么我将不得不更改scratchdir以指向另一个文件系统。但是,这会给部署过程带来额外的复杂性,这是我希望避免的。因此,如果性能不受影响,也就是说,页面缓存在内存中,那么我很乐意不去管它。我意识到序列化的会话数据会在只读文件系统上丢失,但我并不担心这一点,实际上这是一个优点。我只关心编译页面的处理。

看起来jsp已经被编译过了(.class和.java文件存在于$CATALINA_BASE/work下吗?)这就是为什么事情似乎在起作用。

如果在Tomcat启动时使用一个空的只读工作目录(JSP引擎将其用作其scratchDir),那么尝试访问JSP时将看到以下内容:

HTTP状态500 - java.lang.IllegalStateException: No output folder

您有两个选项:a)触摸每个JSP以确保它们都已在工作目录中编译,然后将完整的工作目录包含在您的发行版中b)预编译JSP

我认为b)是更好的选择。

最新更新