当有很多请求时,为什么应用程序会挂起?

时间:2012-05-08 14:52:27

标签: java sql-server-2005 java-ee tomcat

我不明白为什么当请求太多时应用程序会崩溃?如何测试我的应用程序是否具有响应请求的最大容量?

2 个答案:

答案 0 :(得分:0)

为什么你认为申请被绞死?可能只是做一些长期运行的操作?

“挂断太多请求”听起来好像要么资源耗尽(例如,数据库连接),但是,在这种情况下你应该在日志中的某处看到一些异常堆栈跟踪,或者你有一些并发问题。 / p>

要确定,您需要进行线程转储,并查看是否所有线程都在执行您希望它们执行的操作。您可以仅在开始时关注应用程序的线程(数据库线程,逻辑和servlet线程),因为Tomcat或SQL服务器在其中有一些错误。通过查看日志(或根据需要添加它们),尝试找到应用程序停止按预期运行的位置。

答案 1 :(得分:0)

  

我不明白为什么当请求太多时应用程序会崩溃?

如果您询问特定的申请,答案是我们也不知道,而且我们没有任何证据可以推断出问题可能是什么。寻找证据的地方:

  • 检查服务器日志。
  • 如果您有反向代理,请检查代理的日志。
  • 检查后端数据库日志。
  • 检查系统级性能统计信息;例如寻找虚拟机颠簸,磁盘I / O过载等证据。
  • 检查病理性GC行为。
  • 检查阻塞/阻塞的线程,指示并发瓶颈,死锁等。

如果您在一般情况下提出要求,可能会有多种原因:

  • 耗尽外部资源(例如数据库连接)
  • 创建太多线程
  • 尝试对每个请求进行排队,以避免丢弃请求和其他破坏的策略。
  • 并发瓶颈
  • 导致性能在负载下衰减的病理算法或数据库查询设计。
  • 错误恢复错误;例如欠载,你开始得到意外的异常,这会触发资源泄漏。
  • 依旧......
  

以及如何测试我的应用程序的最大响应请求的能力......

创建一个测试工具,重复向服务器发送请求,并查看服务器可以承受的速率。现有的freameworks就是这样做的。