存档

  • 大数据量系统

    这半个月一直在忙,忙着改程序,做实验,原来的系统的处理能力是10^4/10^5,我现在需要处理的数据量是10^6/10^7。原来正常的程序却出现了各种各样的异常,最明显的问题有两个,一个是OutOfMemory,一个是Connection Reset。
    前一个问题有很多种不同的解决方法,就是增加机器的物理内存,调优jvm的启动参数,如果这些都解决不了问题,那就是程序本身的问题。我遇到的最多的就是BufferedReader溢出、ArrayList的不正确使用。这些问题都解决了还是会发现莫明其妙的溢出的话,还是增加物理内存吧。jvm虽然有垃圾收集机制,但是如果程序设计的初衷就没有为大数据量的数据考虑过的话,内存消耗真是件杯具而且及其不好解决在问题,特别是在code base有10^5级别的时候。
    后一个问题,目前我还没有找到好的解决办法,目前能想到的,就是增加发送和接收缓存,平滑发送的速率,可是16*16的链接还是会莫明其妙的断掉。
    郁闷了!还是需要再接再厉,外围的方案解决不了问题的话,只能去动核心的代码了。身边也没有有经验的人可以请教,我自己现在倒是对大数据量、巨数据量系统的可伸缩性和性能有了很强的兴趣。

    431 次查看 | 4 条评论
    2010年2月5日 | 归档于 Java, 技术
  • Python and RRD

    RRD是Round Robin Database的意思,RRDTool是用来管理RRD的一个工具。RRDTool的主页在这里,Wikipedia的页面在这里。RRD其实就是一个时序数据库,使用一个固定大小的环型buffer,适用于存储一些统计性的信息,如CPU负载呀,气温变化呀。我为什么要说这个东西呢,因为XenServer里的性能统计是用的RRD,你可以访问诸如http://xenserver-host/rrd_updates?cf=AVERAGE&interval=5&start=123131321形式的网址来获取统计信息。XenServer将返回一个XML文件,这个XML文件其实就是用rrdtool里的export工具导出的。
    好,下载完成了这个文件以后,我们假设文件名是data.xml,你可以使用rrdtool restore data.xml data.rrd的方式将数据重新恢复成rrd的格式,然后就可以使用rrdtool进行一系列操作。rrdtool的操作可以写十篇博客,这不是我今天想说的重点。
    我今天想说的是,当我把rrdtool跟Python集成的时候,发现Python提供了若干封装的工具,比如Python-PyRRD,Python-rrd,Python-rrdtool,我想没几个人能搞明白这几者之间的关系吧。我来说一下。
    Python-rrdtool,这个就是rrdtool的一个Python封装,调用方式与rrdtool里命令的格式是一致的。
    Python-rrd,这个据说应该是rrdtool的前身,命名方式不符合Python的命名策略,所以改名成了Python-rrdtool,但是debian和ubuntu的源里还保留了一个过渡性质的傀儡包(transitional dummy package),其实就是Python-rrdtool
    Python-PyRRD,这个是OO化的rrdtool封装,个人比较推荐用这个包,方便,代码也更容易让人理解。
    另外,Java也提供了两个rrdtool的封装,一个是JRobin,一个是rrd4j,后者是在前者的基础上做的,提供了更好的OO的支持和性能。但是这两个项目似乎更新得很慢,XenServer导出的rrd数据(version 0003)他们现在不支持(只支持到version 0001)。所以想用Java分析XenServer的性能,还是自己去解析那个xml文件吧。

    239 次查看 | 3 条评论
    2010年1月8日 | 归档于 Java, Linux, Python, Unix, 技术, 数据库
  • Java中线程同步的简单用法

    应用场景:应用程序需要新建若干线程进行事务处理,这些线程处理完毕后,应用程序会进行一些后续的操作。
    解决办法:使用Object.wait(),Object.notify()方法。Object.wait()方法会阻断当前线程的执行,直到其他线程调用Object.notify()。
    于是可以很快的写出一个示例程序:
    public static void main(String[] args) {
    final Object syncObj = new Object();

    Thread thread = new Thread() {
    public void run() {
    try {
    [...]

    52 次查看 | 没有评论
    2009年10月28日 | 归档于 Java, 技术
‘Java’ 分类的存档