根据 MSDN 文档,Page Reads/sec 是尝试解决系统问题是内存不足还是编码问题/内存泄漏的好方法。
我正在寻找其他人的一些建议以及寻找更多信息的方法。
我在我的机器上运行以下命令(Windows 7. 64 Bit. 4GB Ram)
1. InteliJ 10 (Tomcat for my Web Services & JSP for the front end)
2. Oracle 11g
我试图确定问题出在哪里/在哪里——所以我在 JMeter 中创建了一个脚本来运行以稍微限制系统以创建数据并在系统中搜索数据。
运行性能监视器 10 分钟,我的数据如下:
Page Reads/Sec (Average): 26.841
Pages Input/Pages Fault = Hard Fault % = 5%
Pages Fault/sec (Avg) = 2300
MSDN 表示,超过 5 页读取/秒的持续值通常是内存短缺的有力指标,但这是一个持续值,而不是平均水平。它会出现几次峰值,但从长远来看,它似乎在 0-3 之间,其中一些峰值非常大。
我认为内存泄漏可能是问题所在。但是,在检查代码并检查流是否已关闭(文件/输入/数据库连接/等)后,我不太确定。
该数据是否更多地指向内存不足、服务中的内存泄漏或配置问题?
编辑 1:查看堆
我目前只能访问我的开发系统而不能访问生产。需要与其他人协调才能让我访问日志并在系统上使用 jvisualVM。
但是,我上周和今天确实对开发系统进行了一些堆转储。减去 String 和 char[],类的使用没有什么疯狂的。查看监视器,我在开发中的堆大小为 463,863,最大值约为 480。使用的波动在 415 和 450 之间。
使用 Eclipse 内存分析器和堆转储上的“可疑泄漏报告”显示 3 个问题嫌疑人。
1. One instanceo f "org.apache.jasper.servlet.JspServlet" loaded by "org.apache.catalina.loader.StandardClassLoader" Occupies 18.70% The memory is accumulated in one instance of "java.util.concurrent.ConcurrentHashMap$Segment[]
2. The thread org.apache.tomcat.util.threads.TaskThread @ http-apr-8080-exec-19 keeps local variables with total size 12.30%. The memory is accumulated in one instance of "org.apache.tomcat.util.threads.TaskThread" loaded by "org.apache.catalina.loader.StandardClassLoader"
3. The thread org.apache.tomcat.util.threads.TaskThread @http-apr-8080-exec-24 keeps local variables with total size 10.72%. The m emory is accumulated in one instance of "org.apache.tomcat.util.threads.TaskThread' loaded by "org.apache.catalina.loader.StandardClassLoader"
我的印象(可能是错误的)其中一些是正常的,因为 TomCat 最初会加载很多东西并存储它。