运行Web应用程序5天后性能下降,如何发现瓶颈?

时间:2011-08-22 11:17:23

标签: java mysql performance scala playframework

我使用以下技术堆栈开发了一个Web应用程序:

  • 爪哇
  • Mysql的
  • Scala的
  • Play Framework
  • DavMail集成(用于日历和交换服务器)
  • JAVAMAIL
  • Akka演员

在开始的第一天,应用程序运行平稳且没有滞后。但是5天左右后,应用程序变得非常慢!现在我不知道如何描述这个,因为我有很大的依赖性,很难重现这种事情。我已经调查了记忆,似乎一切都没问题。

关于此事的任何指示?

8 个答案:

答案 0 :(得分:10)

尝试使用VisualVM - 您可以监控gc行为,内存使用情况,堆,线程,CPU使用情况等。您可以使用它来连接到远程VM。

答案 1 :(得分:7)

`visualvm˙也是一个很好的工具,你可以连接到一个远程JVM,看看里面是什么。

我建议你这样做:

  • 拍摄自几小时以来5天以来运行的应用程序的快照
  • 比较线程数
  • 比较对象计数,搜索越来越多的数字
  • 查看您的计划在第5天花费的时间是否超过1str
  • 检查磁盘空间,可能你的用完了

答案 2 :(得分:6)

jconsole附带JDK,是发现瓶颈的简单工具。将它连接到您的服务器,查看内存使用情况,GC时间,看看有多少线程处于活动状态,因为它可能是服务器创建了许多线程并且它们永远不会退出。

答案 3 :(得分:4)

我同意tulskiy。最重要的是,如果您对JMeter进行的调查不确定,也可以使用jconsole

性能下降的可能原因是线程(已创建但永不退出)以及内存泄漏:如果分配越来越多的内存,在拥有OutOfMemoryError之前,您可能会遇到一些性能下降(发生几个星期前给我的。)

答案 4 :(得分:3)

要消除数据库,您可以使用慢查询日志监视慢查询(和/或不使用索引的查询) 见:http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html

我猜测你的索引丢失了,而且只有当你的数据量增加时才会显而易见。

答案 5 :(得分:2)

另一个探查者是Yourkit 它是商业性的,但有试用期(两周)。 实际上,我首先尝试VisualVM作为@ axel22建议,但我们的远程服务器是ssh'ed我们有通过VisualVM连接的问题(不是说这是不可能的,我只是在几个小时后投降)。

答案 6 :(得分:2)

您可能只想尝试'播放状态'命令,该命令将列出Web应用状态(线程,作业等)。这可能会给你一些关于发生了什么的提示。

答案 7 :(得分:0)

所以大家,在这种特殊情况下,我在开发者模式下运行游戏,这使编译器不时地工作。

改用生产模式后,一切都闪电般快,不再有问题了。但感谢所有的帮助。