问题标签 [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.
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
. (去投票给他们的两个答案!)这是发生了什么:
我肯定知道的事情:
- 我的应用程序使用JRobin 1.4记录和显示数据,这是我三年多前在我的应用程序中编写的代码。
- 当前创建的应用程序最繁忙的实例
- 启动后一小时内有超过 1000 个新的 JRobin 数据库文件(每个大约 1.3MB)
- 开机后每天~100+
- 如果有要写的东西,应用程序每 15 秒更新一次这些 JRobin 数据库对象。
- 在默认配置 JRobin 中:
- 使用
java.nio
基于 - 的文件访问后端。此后端映射MappedByteBuffers
到文件本身。 - 每五分钟一次,JRobin 守护线程调用
MappedByteBuffer.force()
每个 JRobin 底层数据库 MBB
- 使用
pmap
列出:- 6500 个映射
- 其中 5500 个是 1.3MB JRobin 数据库文件,总计约 7.1GB
最后一点是我的“尤里卡!” 片刻。
我的纠正措施:
- 考虑更新到明显更好的最新 JRobinLite 1.5.2
- 在 JRobin 数据库上实施适当的资源处理。目前,一旦我的应用程序创建了一个数据库,然后在不再积极使用数据库后就不再转储它。
- 尝试移动
MappedByteBuffer.force()
到数据库更新事件,而不是定期计时器。问题会神奇地消失吗? - 立即,将 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 斜率如此规则?它与任何应用程序负载指标无关。
jvm - linux (SL4) 上定义的默认 JVM 堆大小在哪里
我目前在 SL4 集群上使用 sun 的 java 1.6。
出于某种原因,1.6 版 JVM 启动时堆很大,无法启动:
如果我用例如-Xmx1800M 启动它,那么它工作正常。所以,我想知道默认堆大小设置在哪里,更重要的是如何更改它?
这台机器有 8GB 的物理内存,我相信 sun 的服务器 JVM 应该以默认的一半内存最多 512M 启动,但显然不是这样,因为它试图分配超过 1800M。
编辑:我意识到可以使用_JAVA_OPTIONS,但这感觉有点笨拙;我期待某个地方有一个属性文件,但到目前为止我一直找不到它。
java - 无法使用循环发送许多短信
我想使用 GSM 调制解调器从我的 PC 发送 SMS。我已经使用了这个例子,我可以发送短信。我想使用循环向许多用户发送短信,但它不起作用。
我的错误:
c++ - boost::any 测试代码可以用 Sun CC 编译,但不能用 g++
以下点头测试代码:
使用 Sun 的 CC 编译器和默认设置编译和工作正常。但是,当使用 g++ 时,我得到以下信息:
这是g++ 3.4.3版本,所以在4.x版本上可能会有所不同,我稍后会尝试。这是 boost any 中没有包含“is_any”模板的原因,还是编译器错误?
如果我删除模板,我会得到相同的结果,正如您对内联函数所期望的那样。
java - 使用 Sun 的专有 Java 类是一种不好的做法吗?
如果您使用 Sun 的专有 Java 类,编译器会显示警告。我认为使用这些类通常是个坏主意。我在某处读过这个。但是,除了警告之外,还有什么根本原因不应该使用它们吗?
unix - 从 Solaris 的手册页中删除页码?
当我使用 Solaris 时,我每 60 行左右获得一次页码,看起来像这样
另外,我得到像
有什么办法可以去除它们吗?当我逐行阅读文本时,让它们出现会让人分心。
java - 我可以使用哪些非 Sun Java 来运行 Clojure?
我正在自动化为项目构建开发虚拟机的过程,并且很难将 sun-java-6 安装在非交互式环境中,因为它真的想询问许可证。就 clojure 友好的 java 而言,我的其他选择是什么?
java - SCJP有什么好东西吗?
只想知道 SUN 是否提供任何可用于 SCJP 的好东西(免费或付费)?我听说微软正在提供这样的好东西。有人对此有任何想法吗?
干杯,PK
java - 带有 Glassfish 的 Java EE 或 Netbeans?
我已经用 Glassfish 下载了 Netbeans 并安装了它。
然后我必须从 Sun 的站点下载 Java EE 吗?
java - Oracle 下的 NetBeans IDE
我对我刚刚读到的东西有点害怕。我做了一些研究,因为我想开始用 Java 编程,我得出的结论是,NetBeans 是最适合我的 IDE,因为它具有强大的 Swing GUI 设计器和强大的 Jasper Reports (iReport) 报告功能。
然而甲骨文(即将收购 Sun)似乎并不关心 NetBeans。由于我将在不久之后开始用 Java 构建 appz,因此我想知道您对以下问题的看法:
尽管有传言称 Oracle 将停止使用 NetBeans,我还是应该继续使用 NetBeans,还是应该选择另一个 IDE?
PS:基本上 NetBeans 将是选择,但由于目前的情况,我怀疑这个决定。
谢谢