GlassFish 4.1 本地主机 Servlet 响应缓慢 (NetBeans)
GlassFish 4.1 Slow Localhost Servlet Response (NetBeans)
我在 Ubuntu 15.04 上安装了 Netbeans 8.0.2,其中包括 GlassFish 4.1 EE 容器。
出于某种原因,在确保我的 resolv.conf
和 hosts
文件设置正确后,访问动态内容,例如 servlet
从 SQL 数据库,速度慢得要命。
但是,访问静态 JSP 页面 returns 不到 1 毫秒。
在 127.0.0.1 或本地主机 returns 上对服务器执行 0.038 毫秒或更短的 Ping 操作,这是可以预料的,因此我认为 DNS 无法解决 Linux 和本地主机常见的问题都是罪魁祸首。
为了好玩,我从他们的网站上下载了 GlassFish 4.1 服务器并设置了 NetBeans 部署在那里,我得到了相同的结果。此外,我还尝试手动部署我的 WAR 文件,这也导致动态内容/servlet 的响应时间非常慢。
让我明白的是,使用完全相同的设置和配置,我在 Windows 上没有这个问题。
总而言之:
- 静态内容解析和响应不到 1 毫秒。
- 通过 servlet 的动态内容非常慢,最多 5 分钟。
我看了看是不是我的代码。不,不是。它在 Windows 和 Windows 服务器上运行良好。当服务器在 CentOS 上并指向外部时,它甚至运行良好,即你会浏览到 URL 而不是通过本地主机。
澄清一下,即使在不访问任何外部资源的 servlet 上也会出现此问题,例如只添加几行 HTML 的 servlet,或者将请求转发到静态 JSP 页。
嗯,
经过广泛的挖掘和分析,我找到了解决方案:
我有一个过滤器可以对用户进行身份验证,并设置一个针对每个请求更改的 cookie(防止 CSRF),但使用 Java Utils SecureRandom
将安全的随机信息位注入到一个 MD5 散列算法以及其他一些好东西,以吐出一个相当安全的一次性使用 cookie。
显然,我的生产服务器使用的 CentOS 版本已经包含 haveged
守护程序,它使 /dev/random 熵保持在最高水平。
问题是 Linux 上的 SecureRandom
请求 /dev/random 并且正在阻塞。当没有足够的熵时,它最多可以等待 25 秒再返回。
解决方案当然是:安装 haveged
守护进程。问题已解决。
我在 Ubuntu 15.04 上安装了 Netbeans 8.0.2,其中包括 GlassFish 4.1 EE 容器。
出于某种原因,在确保我的 resolv.conf
和 hosts
文件设置正确后,访问动态内容,例如 servlet
从 SQL 数据库,速度慢得要命。
但是,访问静态 JSP 页面 returns 不到 1 毫秒。
在 127.0.0.1 或本地主机 returns 上对服务器执行 0.038 毫秒或更短的 Ping 操作,这是可以预料的,因此我认为 DNS 无法解决 Linux 和本地主机常见的问题都是罪魁祸首。
为了好玩,我从他们的网站上下载了 GlassFish 4.1 服务器并设置了 NetBeans 部署在那里,我得到了相同的结果。此外,我还尝试手动部署我的 WAR 文件,这也导致动态内容/servlet 的响应时间非常慢。
让我明白的是,使用完全相同的设置和配置,我在 Windows 上没有这个问题。
总而言之:
- 静态内容解析和响应不到 1 毫秒。
- 通过 servlet 的动态内容非常慢,最多 5 分钟。
我看了看是不是我的代码。不,不是。它在 Windows 和 Windows 服务器上运行良好。当服务器在 CentOS 上并指向外部时,它甚至运行良好,即你会浏览到 URL 而不是通过本地主机。
澄清一下,即使在不访问任何外部资源的 servlet 上也会出现此问题,例如只添加几行 HTML 的 servlet,或者将请求转发到静态 JSP 页。
嗯,
经过广泛的挖掘和分析,我找到了解决方案:
我有一个过滤器可以对用户进行身份验证,并设置一个针对每个请求更改的 cookie(防止 CSRF),但使用 Java Utils SecureRandom
将安全的随机信息位注入到一个 MD5 散列算法以及其他一些好东西,以吐出一个相当安全的一次性使用 cookie。
显然,我的生产服务器使用的 CentOS 版本已经包含 haveged
守护程序,它使 /dev/random 熵保持在最高水平。
问题是 Linux 上的 SecureRandom
请求 /dev/random 并且正在阻塞。当没有足够的熵时,它最多可以等待 25 秒再返回。
解决方案当然是:安装 haveged
守护进程。问题已解决。