Java GlassFish 4.1慢速本地主机Servlet响应(NetBeans)

Java GlassFish 4.1慢速本地主机Servlet响应(NetBeans),java,jsp,servlets,netbeans,glassfish,Java,Jsp,Servlets,Netbeans,Glassfish,我在Ubuntu 15.04上安装了Netbeans 8.0.2,其中包括GlassFish 4.1 EE容器 出于某种原因,在确保正确设置了我的resolv.conf和主机文件后,访问动态内容(例如从SQL数据库提取数据的servlet)的速度非常慢 然而,访问静态JSP页面在不到1ms的时间内返回 Ping 127.0.0.1或localhost上的服务器返回的时间为0.038ms或更少,这是意料之中的,因此我不认为DNS解决Linux和localhost常见的问题是罪魁祸首 首先,我从他们

我在Ubuntu 15.04上安装了Netbeans 8.0.2,其中包括GlassFish 4.1 EE容器

出于某种原因,在确保正确设置了我的
resolv.conf
主机
文件后,访问动态内容(例如从SQL数据库提取数据的
servlet
)的速度非常慢

然而,访问静态JSP页面在不到1ms的时间内返回

Ping 127.0.0.1或localhost上的服务器返回的时间为0.038ms或更少,这是意料之中的,因此我不认为DNS解决Linux和localhost常见的问题是罪魁祸首

首先,我从他们的网站上下载了GlassFish4.1服务器,并设置了NetBeans在那里部署,我得到了相同的结果。此外,我还尝试手动部署WAR文件,这也导致动态内容/servlet的响应速度非常慢

让我吃惊的是,在完全相同的设置和配置下,我在Windows上没有这个问题

总而言之:

  • 静态内容在不到1ms的时间内解析和响应
  • 通过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守护进程。问题已解决。

您是如何调试此问题的?您可以尝试通过请求命中的代码部分添加调试语句,以便查看延迟发生的位置。很有可能这是数据库端的一个问题-与数据库的通信或数据库本身的通信速度慢。@Mike这是我的第一个想法。排除这种情况的最简单方法是创建一个Servlet,它只向页面添加几行HTML,而不访问任何数据库。结果是一样的。不幸的是,数据库不是罪魁祸首。