大数据量系统

这半个月一直在忙,忙着改程序,做实验,原来的系统的处理能力是10^4/10^5,我现在需要处理的数据量是10^6/10^7。原来正常的程序却出现了各种各样的异常,最明显的问题有两个,一个是OutOfMemory,一个是Connection Reset。

前一个问题有很多种不同的解决方法,就是增加机器的物理内存,调优jvm的启动参数,如果这些都解决不了问题,那就是程序本身的问题。我遇到的最多的就是BufferedReader溢出、ArrayList的不正确使用。这些问题都解决了还是会发现莫明其妙的溢出的话,还是增加物理内存吧。jvm虽然有垃圾收集机制,但是如果程序设计的初衷就没有为大数据量的数据考虑过的话,内存消耗真是件杯具而且及其不好解决在问题,特别是在code base有10^5级别的时候。

后一个问题,目前我还没有找到好的解决办法,目前能想到的,就是增加发送和接收缓存,平滑发送的速率,可是16*16的链接还是会莫明其妙的断掉。

郁闷了!还是需要再接再厉,外围的方案解决不了问题的话,只能去动核心的代码了。身边也没有有经验的人可以请教,我自己现在倒是对大数据量、巨数据量系统的可伸缩性和性能有了很强的兴趣。

2010年2月5日 | 归档于 Java, 技术
  1. chris
    2010年2月7日 23:44 | #1

    啥系统阿

  2. Zerd
    2010年2月23日 15:23 | #3

    在用异步框架么?哪个?

    • 2010年2月26日 11:29 | #4

      现在吃不准用Netty会不会快些,还要做些试验来验证下在我们的实验环境和情景中Netty是不是比Mina更快,才能决定是否要换这个东西。

      • 2010年3月29日 17:54 | #5

        我对你说的两个框架都不熟悉,我不知道Mina用的是什么IO机制,Netty用的是NIO来实现的。
        据说NIO的实现会比基于Stream的BufferedReader好很多。但是在NIO中缓存大小是可以指定的,理论上不会出现溢出的情况。

        • 2010年3月31日 16:24 | #6

          Mina也是基于NIO的,NIO的缓存大小是可以指定的,但是也是有大小限制的(似乎是256kbytes,有待考证),我系统里大概有上G的数据,已经超出可用内存的值了,系统消息的处理速度过慢,消息都被放在了内存里,所以溢出了。

发表评论

XHTML: 您可以使用这些标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">