Java GlassFish 4.1慢速本地主机Servlet响应(NetBeans)
我在Ubuntu 15.04上安装了Netbeans 8.0.2,其中包括GlassFish 4.1 EE容器 出于某种原因,在确保正确设置了我的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常见的问题是罪魁祸首 首先,我从他们
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分钟
要澄清的是,即使在不访问任何外部资源的servlet上也会出现此问题,例如只添加几行HTML的servlet,或者将请求转发到静态JSP页面 经过广泛的挖掘和分析,我找到了解决方案: 我有一个过滤器可以对用户进行身份验证,并为每个请求设置一个更改的cookie(防止CSRF),但使用Java Utils
SecureRandom
将一个安全的随机信息位注入MD5哈希算法,以及其他一些好东西,以吐出一个安全、一次性使用的cookie
显然,我的生产服务器正在使用的CentOS版本已经包含了haveged
守护进程,该守护进程保持了/dev/random熵
问题是Linux上的SecureRandom
请求/dev/random并被阻塞。当没有足够的熵时,它可以在返回之前等待25秒
解决方案当然是:安装haveged守护进程。问题已解决。您是如何调试此问题的?您可以尝试通过请求命中的代码部分添加调试语句,以便查看延迟发生的位置。很有可能这是数据库端的一个问题-与数据库的通信或数据库本身的通信速度慢。@Mike这是我的第一个想法。排除这种情况的最简单方法是创建一个Servlet,它只向页面添加几行HTML,而不访问任何数据库。结果是一样的。不幸的是,数据库不是罪魁祸首。