问题标签 [sun]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
11716 浏览

java - 为什么即使堆等大小稳定,Sun JVM 仍会继续消耗更多的 RSS 内存?

在过去的一年里,我在应用程序的 Java 堆使用方面取得了巨大的进步——减少了 66%。为此,我一直在通过 SNMP 监控各种指标,例如 Java 堆大小、cpu、Java 非堆等。

最近,我一直在监视 JVM 有多少实际内存(RSS,驻留集),有点惊讶。JVM 消耗的实际内存似乎完全独立于我的应用程序堆大小、非堆、伊甸园空间、线程数等。

由 Java SNMP Java 堆使用图测量的堆大小 http://lanai.dietpizza.ch/images/jvm-heap-used.png

以 KB 为单位的实际内存。(例如:1 MB 的 KB = 1 GB) Java 堆使用图 http://lanai.dietpizza.ch/images/jvm-rss.png

(堆图中的三个下降对应于应用程序更新/重新启动。)

这对我来说是个问题,因为 JVM 消耗的所有额外内存都是“窃取”操作系统可用于文件缓存的内存。事实上,一旦 RSS 值达到 ~2.5-3GB,我开始看到我的应用程序的响应时间变慢并且 CPU 利用率更高,主要是因为 IO 等待。当某个点对交换分区进行分页时。这都是非常不可取的。

所以,我的问题:

  • 为什么会这样?“引擎盖下”发生了什么?
  • 我可以做些什么来控制 JVM 的实际内存消耗?

血腥细节:

  • RHEL4 64 位(Linux - 2.6.9-78.0.5.ELsmp #1 SMP Wed Sep 24 ... 2008 x86_64 ... GNU/Linux)
  • Java 6(构建 1.6.0_07-b06)
  • 雄猫 6
  • 应用程序(点播 HTTP 视频流)
    • 通过 java.nio FileChannels 实现高 I/O
    • 数百到数千个线程
    • 数据库使用率低
    • 春天,休眠

相关JVM参数:

我如何测量 RSS:

这进入一个文本文件,并定期读入监控系统的 RRD 数据库。请注意, ps 输出千字节。


问题与解决方案

虽然最终证明是ATorras的答案最终是正确的,但kdgregory引导我使用pmap. (去投票给他们的两个答案!)这是发生了什么:

我肯定知道的事情:

  1. 我的应用程序使用JRobin 1.4记录和显示数据,这是我三年多前在我的应用程序中编写的代码。
  2. 当前创建的应用程序最繁忙的实例
    1. 启动后一小时内有超过 1000 个新的 JRobin 数据库文件(每个大约 1.3MB)
    2. 开机后每天~100+
  3. 如果有要写的东西,应用程序每 15 秒更新一次这些 JRobin 数据库对象。
  4. 在默认配置 JRobin 中:
    1. 使用java.nio基于 - 的文件访问后端。此后端映射MappedByteBuffers到文件本身。
    2. 每五分钟一次,JRobin 守护线程调用MappedByteBuffer.force()每个 JRobin 底层数据库 MBB
  5. pmap列出:
    1. 6500 个映射
    2. 其中 5500 个是 1.3MB JRobin 数据库文件,总计约 7.1GB

最后一点是我的“尤里卡!” 片刻。

我的纠正措施:

  1. 考虑更新到明显更好的最新 JRobinLite 1.5.2
  2. 在 JRobin 数据库上实施适当的资源处理。目前,一旦我的应用程序创建了一个数据库,然后在不再积极使用数据库后就不再转储它。
  3. 尝试移动MappedByteBuffer.force()到数据库更新事件,而不是定期计时器。问题会神奇地消失吗?
  4. 立即,将 JRobin 后端更改为 java.io 实现——换行。这会慢一些,但这可能不是问题。下图显示了此更改的直接影响。

Java RSS 内存使用图 http://lanai.dietpizza.ch/images/stackoverflow-rss-problem-fixed.png

我可能或可能没有时间弄清楚的问题:

  • JVM 内部发生了MappedByteBuffer.force()什么?如果没有任何变化,它是否仍然写入整个文件?文件的一部分?它首先加载它吗?
  • RSS 中是否始终存在一定数量的 MBB?(RSS 大约是分配的 MBB 总大小的一半。巧合?我怀疑不是。)
  • 如果我移动MappedByteBuffer.force()到数据库更新事件,而不是定期计时器,问题会神奇地消失吗?
  • 为什么 RSS 斜率如此规则?它与任何应用程序负载指标无关。
0 投票
2 回答
3550 浏览

jvm - linux (SL4) 上定义的默认 JVM 堆大小在哪里

我目前在 SL4 集群上使用 sun 的 java 1.6。

出于某种原因,1.6 版 JVM 启动时堆很大,无法启动:

如果我用例如-Xmx1800M 启动它,那么它工作正常。所以,我想知道默认堆大小设置在哪里,更重要的是如何更改它?

这台机器有 8GB 的​​物理内存,我相信 sun 的服务器 JVM 应该以默认的一半内存最多 512M 启动,但显然不是这样,因为它试图分配超过 1800M。

编辑:我意识到可以使用_JAVA_OPTIONS,但这感觉有点笨拙;我期待某个地方有一个属性文件,但到目前为止我一直找不到它。

0 投票
2 回答
680 浏览

java - 无法使用循环发送许多短信

我想使用 GSM 调制解调器从我的 PC 发送 SMS。我已经使用了这个例子,我可以发送短信。我想使用循环向许多用户发送短信,但它不起作用。

我的错误:

0 投票
2 回答
977 浏览

c++ - boost::any 测试代码可以用 Sun CC 编译,但不能用 g++

以下点头测试代码:

使用 Sun 的 CC 编译器和默认设置编译和工作正常。但是,当使用 g++ 时,我得到以下信息:

这是g++ 3.4.3版本,所以在4.x版本上可能会有所不同,我稍后会尝试。这是 boost any 中没有包含“is_any”模板的原因,还是编译器错误?

如果我删除模板,我会得到相同的结果,正如您对内联函数所期望的那样。

(相关问题)

0 投票
7 回答
16906 浏览

java - 使用 Sun 的专有 Java 类是一种不好的做法吗?

如果您使用 Sun 的专有 Java 类,编译器会显示警告。我认为使用这些类通常是个坏主意。我在某处读过这个。但是,除了警告之外,还有什么根本原因不应该使用它们吗?

0 投票
4 回答
199 浏览

unix - 从 Solaris 的手册页中删除页码?

当我使用 Solaris 时,我每 60 行左右获得一次页码,看起来像这样

另外,我得到像

有什么办法可以去除它们吗?当我逐行阅读文本时,让它们出现会让人分心。

0 投票
5 回答
1285 浏览

java - 我可以使用哪些非 Sun Java 来运行 Clojure?

我正在自动化为项目构建开发虚拟机的过程,并且很难将 sun-java-6 安装在非交互式环境中,因为它真的想询问许可证。就 clojure 友好的 java 而言,我的其他选择是什么?

0 投票
2 回答
257 浏览

java - SCJP有什么好东西吗?

只想知道 SUN 是否提供任何可用于 SCJP 的好东西(免费或付费)?我听说微软正在提供这样的好东西。有人对此有任何想法吗?

干杯,PK

0 投票
2 回答
734 浏览

java - 带有 Glassfish 的 Java EE 或 Netbeans?

我已经用 Glassfish 下载了 Netbeans 并安装了它。

然后我必须从 Sun 的站点下载 Java EE 吗?

0 投票
5 回答
1801 浏览

java - Oracle 下的 NetBeans IDE

我对我刚刚读到的东西有点害怕。我做了一些研究,因为我想开始用 Java 编程,我得出的结论是,NetBeans 是最适合我的 IDE,因为它具有强大的 Swing GUI 设计器和强大的 Jasper Reports (iReport) 报告功能。

然而甲骨文(即将收购 Sun)似乎并不关心 NetBeans。由于我将在不久之后开始用 Java 构建 appz,因此我想知道您对以下问题的看法:

尽管有传言称 Oracle 将停止使用 NetBeans,我还是应该继续使用 NetBeans,还是应该选择另一个 IDE?

PS:基本上 NetBeans 将是选择,但由于目前的情况,我怀疑这个决定。

谢谢