java - 页面读取 - 内存或编码问题?

标签 java performance oracle memory-leaks

根据 MSDN 文档,页面读取/秒是尝试解决系统问题是否是内存不足或编码问题/内存泄漏的好方法。

我正在寻求其他人的一些建议以及如何继续了解更多信息。

我在我的机器上运行以下程序(Windows 7. 64 位。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 Memory Analyzer 和堆转储上的“可疑泄漏报告”显示 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 最初会加载很多东西并存储它。

最佳答案

您可以做的一件事是查看任务管理器并观察 Java 相关进程占用了多少内存。

汇总所有私有(private)工作集内存,例如前 10 个内存密集型进程(无论它们是否与 Java 相关)。如果该值接近或大于物理内存容量的 75%,或者如果您运行的是禁用 PAE 的 32 位操作系统(您没有说明您的操作系统),这可能是物理内存限制。

如果您的私有(private)工作集总使用量远小于总物理内存,则可能不是与此相关的问题。也可能是与 Oracle 数据库相关的大量磁盘 I/O;更多内存将允许您的系统在 RAM 中缓存磁盘页面,这会显着加快读取速度,因为它将您的 RAM 视为一种磁盘(但 RAM 比硬盘快 20 到 50 倍)。

关于java - 页面读取 - 内存或编码问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14205625/

相关文章:

C# 字典 : faster access but less memory footprint

c# - Parallel.ForEach 性能不佳

oracle - 为什么调度器链步骤名的最大长度是 24 个字节?

java - Android Studio 3.0 DexArchiveBuilderException

java - Java 中是否有 import org.apache.http.client.HttpClient 接口(interface)的实现?

python - 我们如何以最快的方式在 Pandas 数据帧上追加不平衡行?

sql - 如何让文本框在 Apex 中动态更新?

database - 以高效的方式从 Oracle DB 中选择随机行

java - 使用 Java HttpServlet 解码 Soap 信封

java - relativeLayout 无法转换为 android.text.TextWatcher