我使用以下技术堆栈开发了一个Web应用程序:
在开始的第一天,应用程序运行平稳且没有滞后。但是5天左右后,应用程序变得非常慢!现在我不知道如何描述这个,因为我有很大的依赖性,很难重现这种事情。我已经调查了记忆,似乎一切都没问题。
关于此事的任何指示?
答案 0 :(得分:10)
尝试使用VisualVM - 您可以监控gc行为,内存使用情况,堆,线程,CPU使用情况等。您可以使用它来连接到远程VM。
答案 1 :(得分:7)
`visualvm˙也是一个很好的工具,你可以连接到一个远程JVM,看看里面是什么。
我建议你这样做:
答案 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)
所以大家,在这种特殊情况下,我在开发者模式下运行游戏,这使编译器不时地工作。
改用生产模式后,一切都闪电般快,不再有问题了。但感谢所有的帮助。