gpt4 book ai didi

如果运行一天,Java Web 应用程序会变慢

转载 作者:搜寻专家 更新时间:2023-11-01 01:37:58 26 4
gpt4 key购买 nike

我正在使用 apache wicket 框架和 Eclipselink 以及用于 OR 映射的 PostgreSQL 开发一个 java web 应用程序。

如果我运行应用程序(在本地主机或远程服务器上),一切都很快且可用。目前只有五个用户。大约一天后,应用程序的某些部分开始变慢。特别是使用数据库数据的页面和使用 OWL 文件数据的自动完成功能。静态页面加载速度非常快。

有什么办法可以找到问题吗?

编辑:

感谢您的回复。问题似乎是 session 产生的内存使用量。这就解释了为什么我无法在只有一个用户的本地计算机上重现该问题。对我来说,一个快速修复是在启动 Tomcat 时增加堆大小(-Xmx 和 -Xms)。现在,我将深入到 wicket 页面并找到内存消耗模型。

最佳答案

Wicket 要求围绕序列化页面的“权重”进行一些非常可靠的编码实践。序列化的页面存储在 session 中,如果您未能分离任何类级模型,数据也会被序列化。在我意识到这一点之前,我看到 session 大小接近数百 MB,因为我正在序列化一半的数据库查询!

所以,一些可能有帮助的事情:

覆盖您的 session 存储以在您修改 session 时警告您,如果 session 太大。

 public class CustomSessionStore extends SecondLevelCacheSessionStore {

@Override
public void setAttribute(Request request, String name, Object value) {
super.setAttribute(request, name, value);

if (Session.get().getSizeInBytes() > SESSION_WARN_LIMIT) {
log.warn("Session Size is {} bytes", Session.get().getSizeInBytes());
}
}
}

确保分离模型:

public class MyPage extends WebPage {

IModel<HeavyDataObject> heavyModel;

@Override
public void onDetach() {
if (heavyModel != null)
heavyModel.detach();
}

}

在应用程序运行时,使用 wicket 开发人员工具监控各种数据大小/存储。 Maven 依赖项是 org.apache.wicket wicket-devutils

希望对您有所帮助!

关于如果运行一天,Java Web 应用程序会变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6844329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com