java - Tomcat Linux 服务器失败问题

标签 java linux tomcat centos

周五下午很晚,我的 Web 应用程序已停止响应请求。服务器仍然可以访问,并且 Apache Tomcat 进程没有运行——日志中没有错误。你想回家,但在修好之前你不能回家。你是做什么的?

站点将在我重新启动服务器后运行

服务器管理员告诉我“经过进一步调查,我们了解到 Tomcat 应用程序无法处理在您网站的高峰工作时间或高流量时进入服务器的大量请求在网站上。这是Tomcat服务挂起或崩溃的原因,那么唯一的解决办法就是重新启动它,以便Tomcat服务运行。所以其他时候说堆大小问题“

但我的网站每天最多只能产生 250 人。

请建议我该怎么做。

最佳答案

您需要对您的代码进行负载测试,由于所提供的信息有限,这时来自任何人(即来自 stackoverflow 的答案)的答案将非常有限。

它是否启用了 jmx? 如果是这样,然后通过 jconsole 连接到您的 tomcat 服务器并观察发生了什么,在我看来它是堆转储并且可能是内存限制然后崩溃。

您可以先将类似的内容添加到您的 setenv.sh

-verbose:gc -Xloggc:/var/log/tomcatXX/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps

http://freddyandersen.wordpress.com/2009/07/14/how-to-enable-verbose-gc-in-tomcat/

然后您可以查看 gc 日志以了解它执行完整 gc 的频率以及当前配置是否确实存在问题。

问题是您可以不同地配置它,但由于代码中的内存泄漏仍然面临崩溃。这就是为什么通过 jconsole 进行负载测试和观察 jvm 很重要的原因——通常在完整的 gc 之后,内存使用率应该回落到默认的可用水平,如果它不断地 fork ,直到每次完整的 gc 之后可用的内存更少,你可以确保代码中存在内存泄漏。

查看 tomcat 进程上的 Xms amd XMx 设置,如果它很低,请尝试增加它,这通常是您的应用程序 (tomcat) 的整体内存配置,这是在内存泄漏的帮助下达到其容量时会崩溃。

如果 Xmx 和 Xms 设置得像 512M 一样低,一定要尝试将它加倍,如果更好并且有更多内存,您可以选择 2gigs 等等。

所以增加它会增加它的运行时间,但这也仅限于硬件的实际可用内存。

增加您的 Xmx 和 Xms 内存配置意味着它在达到完整 GC 之前有多少内存。假设您的解决方案是高可用性的,并且您有坚固的盒子,您可以让堆栈 A 假设 40Gigs xmx xms 设置,在负载测试和针对预期流量的测试之后将 = 14 小时的实际应用程序,没有完整的 gc,之后它将变为完整gc - 这将提供 14 小时的不间断应用程序使用 - 之后你将无法堆栈 b 并让堆栈 a 执行完整的 gc

定义的内存越多 = gc 实际发生所需的时间越长 =
由于更高的内存配置,GC 的时间越长 = GC 时的实际停机时间越长。

一个例子:

它就像一个大 skip - 与大 skip 相比,较小的 skip 用手装满或清空所需的时间肯定更少。因此,更大的内存配置 = 使用更小的 gc 需要更多的时间,并且需要更长的时间才能达到完整的 gc,但是当它达到完整的 gc 时,将需要更长的时间才能清空,在此期间应用程序不会响应请求。

正确的解决方案是运行多个 tomcat 服务器和备用或循环并让它们共享流量 - 这是如果你有一个 apache 前端或者如果没有配置为负载平衡和标记节点等的 F5 之类的东西

这应该会给你一些关于寻找什么和考虑修改的想法

关于java - Tomcat Linux 服务器失败问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21652581/

相关文章:

java - <%@ 页面导入 ="com.sql.*"%> 错误

java - spring-batch 读取 null int 值

spring - HTTP 状态 404 -/gwtspring/com.javacodegeeks.gwtspring.Application/Application.html

java - 无法将字符串转换为长

java - 对本例中的字符串比较感到困惑

c - 如何为 connect() 设置超时以及如何测量它?

python - linux - 立即启动一个线程

linux - Elasticsearch安装错误: No such file or directory

tomcat - 我的 Tomcat 重写规则不起作用,我不知道为什么

jsp - session ID 定期更改 (nginx/tomcat/mamcached/MSM)