当前位置: 首页 > jvm
  • 某java应用在压测一段时间后就会把物理内存耗光原因:SocketChannel.write的时候,如果是Direct ByteBuffer会导致memory leak,而且Trustin Lee(Mina/Netty的作者)也这么说的:”it’s a known bug”。解决方法是:限流,当未发送的字节数到达某个比率后,就暂时先不发送了,或者报错等等,用netty能对这个现象有一定的缓解,但限流动作还是要做,否则可能会出现接收方处理慢,从而导致发送方内存用完的现象。

    阅读全文
    Java 809 人阅读 抢沙发 , , , , ,
  • 在查看String.intern的一些变化时,突然想到了这个case,发现在这个case的根本原因上,判断错误了,频繁抛NoSuchMethodException并不是造成cpu us变化的原因,而是因为method = clazz.getMethod(methodName, parameterTypes);这行代码,对应的Class.getMethod中会执行methodName.intern(),而这个case中,methodName会跟着请求而动态的变化,所以导致了位于perm gen的StringTable中的String不断的增加,而StringTable的size默认为1009,String太多的话会导致hash冲突严重,链表长度过长,导致了每次String.intern时去链表里遍历很耗cpu。

    阅读全文
    Java 463 人阅读 抢沙发 , , ,
  • 垃圾回收时promotion failed是个很头痛的问题,一般可能是两种原因产生,第一个原因是救助空间不够,救助空间里的对象还不应该被移动到年老代,但年轻代又有很多对象需要放入救助空间;第二个原因是年老代没有足够的空间接纳来自年轻代的对象;这两种情况都会转向Full GC,网站停顿时间较长。

    阅读全文
    Java 1,495 人阅读 抢沙发 , , ,
  • JVM参数的设置(特别是 –Xmx –Xms –Xmn -XX:SurvivorRatio -XX:MaxTenuringThreshold等参数的设置没有一个固定的公式,需要根据PV old区实际数据 YGC次数等多方面来衡量。为了避免promotion faild可能会导致xmn设置偏小,也意味着YGC的次数会增多,处理并发访问的能力下降等问题。每个参数的调整都需要经过详细的性能测试,才能找到特定应用的最佳配置。

    阅读全文
    Java 539 人阅读 抢沙发 , ,