小编Stu*_*son的帖子

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

在过去的一年里,我在应用程序的Java堆使用方面做了很大的改进 - 减少了66%.为此,我一直在通过SNMP监控各种指标,例如Java堆大小,cpu,Java非堆等.

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

堆栈大小由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(build 1.6.0_07-b06)
  • 雄猫6
  • 应用程序(按需HTTP视频流)
    • 通过java.nio FileChannels实现高I/O.
    • 数百到数千个线程
    • 数据库使用率低
    • 春天,Hibernate

相关的JVM参数:

-Xms128m  
-Xmx640m  
-XX:+UseConcMarkSweepGC  
-XX:+AlwaysActAsServerClassMachine  
-XX:+CMSIncrementalMode    

-XX:+PrintGCDetails 
-XX:+PrintGCTimeStamps  
-XX:+PrintGCApplicationStoppedTime  
-XX:+CMSLoopWarn  
-XX:+HeapDumpOnOutOfMemoryError 
Run Code Online (Sandbox Code Playgroud)

我如何衡量RSS:

ps x -o command,rss | grep java | grep latest | cut -b 17-
Run Code Online (Sandbox Code Playgroud)

这将进入一个文本文件,并定期读入我的监控系统的RRD数据库.请注意,ps输出Kilo Bytes.


存在的问题及解决方案小号:

虽然最终是ATorras的答案证明最终是正确的,但是kdgregory …

java memory performance jvm sun

33
推荐指数
2
解决办法
1万
查看次数

有没有办法在S3上托管内容的index.html功能?

有没有办法让S3默认为index.html页面?例如:我的桶对象列表:

/index.html
/favicon.ico
/images/logo.gif
Run Code Online (Sandbox Code Playgroud)

呼叫到www.example.com/ index.html的伟大工程!但是如果要打电话给www.example.com/,我们要么根据桶级ACL的配置方式获得列出XML文档的403或REST对象.

所以,问题是:有没有办法在S3上托管内容的index.html功能?

amazon-s3 amazon-web-services

31
推荐指数
2
解决办法
2万
查看次数

为什么ByteBuffer.allocate()和ByteBuffer.allocateDirect()之间的奇怪性能曲线差异

我工作的一些SocketChannel至- SocketChannel代码会做最好用直接字节缓冲区- (几十到几百每个连接的兆字节),长寿命,大而散列出具有确切循环结构FileChannelS,我跑了一些微在基准测试ByteBuffer.allocate()ByteBuffer.allocateDirect()性能.

结果出人意料,我无法解释.在下图中,对于ByteBuffer.allocate()传输实现,在256KB和512KB处有一个非常明显的悬崖- 性能下降了~50%!这似乎也是一个较小的性能悬崖ByteBuffer.allocateDirect().(%-gain系列有助于可视化这些变化.)

缓冲区大小(字节)与时间(MS)

小马差距

为什么奇数性能曲线ByteBuffer.allocate()ByteBuffer.allocateDirect()?之间存在差异? 幕后究竟发生了什么?

它很可能取决于硬件和操作系统,所以这里有以下细节:

  • MacBook Pro配双核Core 2 CPU
  • 英特尔X25M SSD硬盘
  • OSX 10.6.4

源代码,按要求:

package ch.dietpizza.bench;

import static java.lang.String.format;
import static java.lang.System.out;
import static java.nio.ByteBuffer.*;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;

public class SocketChannelByteBufferExample {
    private static WritableByteChannel target;
    private static ReadableByteChannel source; …
Run Code Online (Sandbox Code Playgroud)

java nio bytebuffer

31
推荐指数
4
解决办法
1万
查看次数

Erlang模拟器信息语句是什么意思?

当我启动我的Erlang模拟器时,第一位有一堆信息性的东西.(稍微重新格式化效果.)

manoa:~ stu$ erl
Erlang (BEAM) emulator version 5.6.5 
[source] [smp:2] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.6.5 (abort with ^G)
1> 
Run Code Online (Sandbox Code Playgroud)

其中一些我可以猜到,可能是准确的,但有些意味着'这里是魔术'.

  • Erlang (BEAM) emulator version 5.6.5:版本,当然
  • [source]:模拟器是从源代码编译的?
  • [smp:2]:检测到两个CPU核心并且可用
  • [async-threads:0]:目前有工作吗?
  • [hipe]:?
  • [kernel-poll:false]:?

我也想知道是否有其他[foo]项目可能弹出不同的配置,构建或启动参数.

那么,Erlang模拟器信息语句意味着什么呢?

erlang emulation erl

30
推荐指数
2
解决办法
5637
查看次数

如何启用FFMPEG日志记录以及在何处可以找到FFMPEG日志文件?

我希望能够记录FFMPEG进程,因为我正在尝试计算一分钟的视频转换为帮助我的视频编码服务器的容量规划.如何启用日志记录以及保存日志文件的位置.我在CentOS LAMP机器上安装了FFMPEG.

logging encoding ffmpeg capacity-planning file

28
推荐指数
4
解决办法
8万
查看次数

24
推荐指数
3
解决办法
2万
查看次数

ConcurrentHashMap.get()是否保证通过不同的线程看到以前的ConcurrentHashMap.put()?

是否保证通过不同的线程看到以前的?我的期望是,并且阅读JavaDocs似乎表明了这一点,但我99%确信现实是不同的.在我的生产服务器上,下面似乎正在发生.(我已经记录了它.)ConcurrentHashMap.get() ConcurrentHashMap.put()

伪代码示例:

static final ConcurrentHashMap map = new ConcurrentHashMap();
//sharedLock is key specific.  One map, many keys.  There is a 1:1 
//      relationship between key and Foo instance.
void doSomething(Semaphore sharedLock) {
    boolean haveLock = sharedLock.tryAcquire(3000, MILLISECONDS);

    if (haveLock) {
        log("Have lock: " + threadId);
        Foo foo = map.get("key");
        log("foo=" + foo);

        if (foo == null) {
            log("New foo time! " + threadId);
            foo = new Foo(); //foo is expensive to instance
            map.put("key", foo); …
Run Code Online (Sandbox Code Playgroud)

java multithreading concurrenthashmap

22
推荐指数
2
解决办法
1万
查看次数

更有效的方法来查找和tar数百万个文件

我在命令行提示符下运行了两天的作业:

find data/ -name filepattern-*2009* -exec tar uf 2009.tar {} ;
Run Code Online (Sandbox Code Playgroud)

它需要永远,然后一些.是的,目标目录中有数百万个文件.(每个文件在一个良好的散列目录结构中只有8个字节.)但是只是运行...

find data/ -name filepattern-*2009* -print > filesOfInterest.txt
Run Code Online (Sandbox Code Playgroud)

......只需要两个小时左右.按照我的工作速度,它将在几周内完成.这似乎是不合理的.这样做有效吗? 也许使用更复杂的bash脚本?

第二个问题是"为什么我目前的做法如此缓慢?"

bash tar find

22
推荐指数
4
解决办法
2万
查看次数

哪种浏览器更容易开发插件?Chrome或Firefox?

我想为Web浏览器开发一个小插件,即Chrome和FireFox.哪一个更容易†为第一个项目开发?我对这个空间非常不熟悉,因为我花了大部分时间来编写服务器端Java.

†:在我的上下文中更容易意味着:

  • 浅学习曲线
  • 额外的工具的至少量所需
  • 类似Java的语法,即:JavaScript
  • 可靠的API文档

如果重要,这是我的插件的目标:

  • 在具有特定标记的页面中查找图像标记.例:<img src="bobisyouruncle.jpg" findme="found" />
  • 将图像发送到我的远程RESTful Web服务
  • 将图像叠加到上面的图像上(或替换它)
  • 允许简单配置和存储以对Web服务进行身份验证

非常感谢来自直接经验编码两种浏览器的人的答案.

browser firefox plugins google-chrome

21
推荐指数
1
解决办法
3779
查看次数

Java:基于ISO 4217货币鳕鱼的货币符号

程序下方打印出符合ISO 4217货币代码的货币符号.

import java.util.*;

public class Currency{

    public static void main(String args[]) {
        Currency myInstance = Currency.getInstance(args[0]);
        System.out.println(myInstance.getSymbol());
    }
}
Run Code Online (Sandbox Code Playgroud)

问题:输入字符串USD时工作正常.对于像EUR这样的其他输入,只需返回货币代码.

样本输入,来自程序的输出:

input: java Currency USD 
output: $
input: java Currency EUR
output: EUR -> I expect the symbol of Euro here
Run Code Online (Sandbox Code Playgroud)

java

20
推荐指数
1
解决办法
2万
查看次数