Jetty 服务器已在消耗 47g 磁盘的临时目录中创建内容 space

Jetty server has created content in temp directory that have consumed 47g disk space

我们的 Web 在生产中的 Jetty 服务器上运行。在其中一种情况下,我们的生产中断了,但已修复。停电确实发生了2-3次。

现在,一段时间后我们观察到 Jetty 服务器创建了 war 日志,消耗了 47g 磁盘 space 并且这只发生在其中一个虚拟机上。我们没有在我们的代码中这样做。请注意,我们部署了 2 war 个文件。附上截图,希望能有所帮助。

任何输入或建议 - 为什么 jetty 会创建 war 应用程序不需要或不需要的日志文件占用如此多的 space 将是一个很大的帮助!提前谢谢你

附加 war 文件的处理程序代码:

private HandlerCollection getWebAppHandlers() throws SQLException, NamingException{
  
    // Setting service war
        WebAppContext serviceWebapp = new WebAppContext();
        serviceWebapp.setWar(API_WAR_FILE_PATH);
        serviceWebapp.setContextPath(API_CONTEXT_PATH);
    
        //setting the war and context path for the UI layer: oaxui
        WebAppContext uiWebapp = new WebAppContext();
        uiWebapp.setWar(UI_WAR_FILE_PATH);
        uiWebapp.setContextPath(UI_CONTEXT_PATH);
        uiWebapp.setAllowNullPathInfo(true);
        uiWebapp.setInitParameter("org.eclipse.jetty.servlet.Default.dirAllowed", "false");
    
        //set error page handler for the UI context
        uiWebapp.setErrorHandler(new CustomErrorHandler());
    
        //handling the multiple war files using HandlerCollection.
        HandlerCollection handlerCollection = new HandlerCollection();
        handlerCollection.setHandlers(new Handler[]{serviceWebapp, uiWebapp});
        return handlerCollection;
    }

这些不是日志文件。

它们似乎是工作目录/临时目录路径。 可能在您的系统临时目录中。

使用语法 ...

String defaultWorkingDirectoryName = 
  "jetty-" 
    + host + "-" 
    + port + "-" 
    + resourceBase + "-_" 
    + context + "-" 
    + virtualhost + "-" 
    + randomdigits;

过去关于为 webapp 设置临时目录的答案。

Jetty: How to change startup temp directory

对于嵌入式 Jetty,执行此操作。

你的 uiWebappserviceWebapp 应该都有指定的临时目录,它们应该是唯一的。

// MYBASEDIR comes from your application config
// suggest that it be MYBASEDIR=/var/run/myapp
uiWebapp.setTempDirectory(new File(MYBASEDIR + "/uiWebapp-temp-dir"));
serviceWebapp.setTempDirectory(new File(MYBASEDIR + "/serviceWebapp-temp-dir"));

您可能还想根据需要设置 WebAppContext.setPersistTempDirectory(boolean)

这将删除重新启动之间的临时目录。 (在适当的 webapp 关闭和 webapp 启动时)。

还有...

因为这是一个 unix 环境,你应该有一个系统启动来清除旧文件的系统临时目录。

这可以通过执行临时目录定期扫描的各种内置工具来完成。

但要小心长 运行 应用程序,例如您的网络应用程序和 Jetty。 将主动使用过的目录从其下清除对稳定性来说是一件坏事。

在 Linux 上使用 Embedded Jetty 通常是一个好主意,以精确设置 Jetty 临时目录,而不是使用默认目录,并将该工作目录放在 /var/run/<app> 目录树中。