【问题标题】:Performance drop after 5 days running web application, how to spot the bottleneck?运行 Web 应用程序 5 天后性能下降,如何发现瓶颈?
【发布时间】:2011-11-01 01:53:04
【问题描述】:

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

  • Java
  • Mysql
  • 斯卡拉
  • 播放框架
  • DavMail 集成(用于日历和交换服务器)
  • Java 邮件
  • Akka 演员

在第一天,应用程序运行顺利,没有滞后。但是在 5 天左右之后,应用程序变得非常缓慢!现在我不知道如何描述这个,因为我有很大的依赖关系并且很难重现这种事情。我查看了内存,似乎一切正常。

关于此事的任何指示?

【问题讨论】:

  • 您还可以在他们的官方页面上查看您正在运行的所有内容的版本。也许问题不在于您的代码(但是,这不太可能)并且已经修复了某些问题?

标签: java mysql performance scala playframework


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我同意塔尔斯基的观点。除此之外,如果您使用jconsole 进行的调查尚无定论,您还可以使用JMeter

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        我会冒险猜测您缺少索引,并且随着您的数据量增加而变得明显。

        【讨论】:

          【解决方案5】:

          `visualvm˙ 也是用于此类目的的好工具,您也可以连接到远程 JVM 并查看其中的内容。

          我建议你这样做:

          • 拍摄从几小时到 5 天后运行的应用程序的快照
          • 比较线程数
          • 比较对象计数,搜索增加的数字
          • 查看您的程序在第 5 天在特定方法上花费的时间是否比在第 1 天花费的时间更多
          • 检查磁盘空间,也许你的磁盘空间用完了

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              【解决方案7】:

              您可能只想尝试 'play status' 命令,该命令将列出 Web 应用程序状态(线程、作业等)。这可能会给你一个关于正在发生的事情的提示。

              【讨论】:

                【解决方案8】:

                所以伙计们,在这个特定的情况下,我在开发者模式下运行游戏,这使得编译器时不时地工作。

                切换到生产模式后,一切都快如闪电,不再有任何问题。不过感谢大家的帮助。

                【讨论】:

                  猜你喜欢
                  • 2010-11-22
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-09-12
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-09-27
                  相关资源
                  最近更新 更多