路过Oracle Open World

偶然的机会,今天去了一趟三番的Oracle Open World + Java One。去年的Open World本来是可以去的,不过我换了公司,就没了。 本来是带着研究Coherence的任务去的,边上就是Tuxedo的booth,看到Todd Little胖墩墩的坐在那里,还觉得挺有趣的,一转身,Frank走了过来,颇有一种他乡遇故知的感觉,不过也有点不好意思,谁让咱跑了呢。互相寒暄了一下,今年中国也来了不少人,William Cai据说代表Security Team去了。不过转了一圈,Identity Management有好多柜台,却没有认识的。泱泱离去。 找到Coherence柜台,跟Brian Oliver聊了聊,这个组其实有好多以前的同事,比如高大为同学。一问,果然都认识。这个其实也就是一种Distributed Cache,听他讲了讲,似乎feature还不错,不过也没仔细比较跟memcached或者cassandra的区别(话说cassandra最近势头很不好,digg的VP Engineering因为用了这个做的不好走人了)。有空再研究吧。 下午正好赶上拉里埃里森的keynote,他看起来的确老了,都66岁了。没有听到开头,过去的时候已近开始讲Middleware和Fusion Application。讲到Fussion Application的时候人开始退场,到后来退场的人很多很多,看来对这个东西都不感兴趣,尤其是Larry下去,让其他几个人demo的时候。我在Oracle的时候就对这种从头做的应用抱有怀疑的态度,外加那个“做的很复杂以至于看不到明显的错误的ADF”,看来大家使用脚投票了。不知道这玩意前景如何。。。 Keynote会场的门口放了两套大机器,一个Full Rack Exadata,还有一套Exadata + Exalogic配合的东西,性能的确很强,不过价钱也很强,不是一般人消费的起的——1/4的Rack据说要1M$左右。在边上放了四个Iron Man的从旧到新的模型,上面的大屏幕还放着Iron Man 2的广告,我看来看去,觉得Iron Man就是Larry演的,而且Iron Man的性格也像极了Larry,很张扬。 其实也没啥具体的收获,开开眼界吧。

九月 23, 2010 · Shawn Ma

理想的Tokyo Tyrant

敝公司在使用Tokyo Tyrant这个高性能的key-value DB,总的来说,性能相当不错,不过在数量达到50M之后有明显的瓶颈,以至于我们3000的TPS都有点困难了。究其原因,是因为我们用的是hash db,文件大了以后,任何一个写操作都在硬盘不同地点,于是就是对硬盘的完全的随机写,在我们的RAID10上,也只能做到100多IOPS,可想而知,效率是多么的低下了。 其实最直观的解决方案就是换SSD硬盘,比如INTEL的MLC SSD硬盘号称可以达到8500 writes/second。不过这个可能需要一些沟通和批准的工作,而且对于Engineering最有意思的就是在现有的条件下,实现最大的可能,所以,我们可以做点什么呢? 不立刻写入硬盘,而是类似Cassandra和Redis那样,只写入redo log(ulog),就返回。另外在后台有一个线程,定期将dirty data写入硬盘。这个写入应该是顺序写入的,以避免随机写的问题——我们的硬盘顺序写可以有80M/s,还算不错了。 这也就意味着要缓存不少的数据,为了高效,所有的写数据都应该被缓存——很可能会被读,不过现在内存应该也不是大问题,而且我们的TT跑了一段时间之后,对硬盘的读就没有了——全部被操作系统缓存了,所以读不是什么问题。 写入线程要考虑如何和其他的线程一起工作——它不能锁住所有的线程,所以考虑是不是把数据库分段?可以参考以下redis之类的? 删除的处理,删除了数据之后就留下空穴,那么必须要有一个defragment的线程。更新等同于删除+新增。 如果该进程crash了,重启的时候要replay redo log,这个跟上一点有关系,因为可能不能得到一个完整的某一个时刻的snapshot。 要能支持多台机器的master-master复制,master-slave比较麻烦,failover之后还要手动切换。应该是都是没有任何区别的master,因为他们的数据都是相同的。我们的数据特点是,量大,不过每条数据都不大,100字节足够,所以并不是很需要consistent hash。 为什么不用Redis?Redis要求所有的数据都在内存里,对于我们公司的应用来说,有时候有点困难——想象如果有1亿条记录,光hash的bucket(64 bit)就要0.8G,用mmap还是靠谱一点。最好是常用的在内存里,不常用的就待在硬盘上就好了。我们的数据大概一半以上都很不常用。 Cassandra也试了一下,不过似乎有更多的问题,它的读效率实在太低, 因为需要从硬盘load sstable,这个就是一个随机读的问题的,再用Java实现,读的TPS只有不到100. 解决方案就是使用Key cache和 Row cache,不过那又是把很多数据load在内存里,而且warm up似乎很慢。(为什么会比Tokyo慢?)

六月 15, 2010 · Shawn Ma

20100607

有时候人的表现欲来了,就什么都愿意说。有时候又懒到数月无话。 今天有两个有意思的事情。其实也没什么大不了的,不过还算好玩。 一个是我们一个同事启动敝公司的一个WLS server,折腾了一天,总是起不来,WLS刚启动之后就报,shutdown hook被调用了,然后就死了。作为前BEA的员工,被认为是专家,于是就得帮人消灾。先是以为是terminal退出导致SIGHUP造成的,不过一看WLS的参数里有-Xrs,看来不是signal的问题。难道有人在后台kill?用truss跟踪一下,居然看到了有SIGSEGV的消息,不过看起来不像,要是真SIGSEGV了,早就core dump了。后来想,还是老老实实配一个debugger,跟踪一下System.exit()吧。一直不想搞这个是因为eclipse连美国的机器特慢,WLS的线程又超多(我们自己也在WLS里启线程),后来就练习了一下jdb. 虽然不够好用,不过做这个事情还是够了。要是真的是production系统上,还真可能只能用这个东西了(最好永远别用上)。结果很简单,license check的程序调了System.exit(),update一下就好了。 另外最近比较迷python。发现这个东西写程序的确比较简洁,在很多情况下可以提高productivity。比如他是不需要编译的。比如他的语法很灵活。今天学到的是用它分析一个C程序生成的数据文件。是什么C程序呢?Tokyo Tyrant,一个memcached的变种。效率不错,附带持久化。但是不知道为什么某些值总是插入失败。我们的工程师没有什么头绪。Python如何分析呢?当然得根据这个文件的结构来。这个文件(hash的数据库)先是256字节的header,然后是hash bucket*8byte的hash桶,桶里是每个record在文件中的偏移,其实就是一个索引啦。再后面是一个不知道多大的free record list,大概是指出文件中的空穴(delete带来的)。然后就是一个一个的record。 一开始还不明白该怎么搞,后来发现它的str可以放任何东西,其实就是一个byte array。(python没有byte[])。然后还有一个很强大的struct包,很容易就可以解析C的那种struct的内容。比如: from struct import * f=open(‘database.tch’,’rb’) header=f.read(256) meta=unpack(“<32x2xbb4xQQQQ184x”,header) print meta 就可以得到(4, 10, 10485751, 3154959, 388634224, 83890432),其中10485751就是bucket的大小,83890432则是第一个record的偏移量。然后从256byte开始遍历10485751个hash值,把非0的偏移的记录都读出来,结果发现,所有的199M-228M之间的内容全是0。于是得出结论说,在那个时候,应该是发生了点事情,比如硬盘满了。。。 嗯哼。满意了。不过python的IO似乎有点慢,CPU使用率很低。还要加油啊。Java现在已经很不错了。

六月 7, 2010 · Shawn Ma

ADF: 一坨软件

有两种方式构建软件设计:一种是把软件做得很简单以至于明显找不到缺陷;另一种是把它做得很复杂以至于找不到明显的缺陷。 —C.A.R Hoare 这是在oracle一篇没完成的文章。当时我们用ADF这个框架写程序。这个东西搞得太复杂了,到处都是bug,所以感叹说,也不知道这个东西到底有没有什么问题。

一月 29, 2010 · Shawn Ma

When the DPC uses too much CPU

现在用联想的一个X200,最近发现CPU总是不闲着,用电池消耗的也特别快,用Process Explorer看了一下,报告说DPC占很多的CPU时间: 这个很不懂,要是一般的进程,杀掉就可以了,比如传说中的firefox就喜欢吃内存和CPU(其实很多时候是flash闹的),DPC叫 Deferred Procedure Call, 是Windows用来处理中断的玩意,这个东西咋办呢? 研究了一下发现 Windows DDK 的 tracelog 不错。 Windows DDK是驱动开发的工具包,其实我只要里面的一个tracelog.exe,和tracerpt.exe,网上找不到,害得我去当了最新的Windows DDK 7.0。参见这里:How much time is your driver spending in its DPCs and ISRs? 运行: tracelog -start -f test01.etl -dpcisr -UsePerfCounter tracelog -stop tracerpt test01.etl -report d.txt -df</pre> 结果如下(节选): DPC processor utilization for the whole trace +--------------------------------------------------------+ | Processor Utilization Module Address | +--------------------------------------------------------+ | 0 18.34% ntkrnlpa.exe 8050327A | | 1 0.00% ntkrnlpa.exe 8050327A | | 0 16.92% chdau32.sys A5CC2DC6 | | 1 0.00% chdau32.sys A5CC2DC6 | ntkrnlpa.exe没啥好看的,windows kernel,看看chdau32.sys吧,在同一个文件中: ...

十一月 3, 2009 · Shawn Ma

世界上最流行的IMEI

IMEI是International Mobile Equipment Identity的意思。顾名思义,就是每个手机所拥有的一个识别号,中文大概叫串号。如网卡地址一样,IMEI号理论上应该是全球唯一的,我们挑手机的时候也会输入*#06#什么的去验证是不是三码合一。如果这样来说,怎么会有最流行的IMEI之说呢?很有趣的是,最近在一个运营商那里就见到了,这个IMEI号就是:135790246811220。为什么?这个号是著名的MTK芯片里面的Sample Code里写的一个IMEI号码,中国很多的山寨厂商都不遵守IMEI分配的规定,他们根本就不管这个是干什么的,就直接使用这个IMEI号,然后很多这样的手机就卖到了某个发展中国家,于是就给我们的软件带来了很多问题——我们一直默认IMEI是唯一的。 叫我怎么说山寨好呢?

八月 24, 2009 · Shawn Ma

如何移动Vista上的用户目录

最近终于开始使用vista了。一个好的改动就是把”Documents and settings”这个目录改成Users这个目录了,可惜Program Files还是没改——空格很讨厌的,尤其你在使用命令行的时候,就可能需要用到引号。 不过Vista默认的用户目录还是在C:\Users。多年来的一个习惯就是把用户目录给转移到另外一个盘,这样如果那天不高兴了,把C盘ghost一遍就好了。Windows为什么不能在安装的时候让人选择一下呢? 在那些古老的XP的时代,一般只要把My documents这个目录移动一下就好了。不过桌面什么的最后还是要清理一下。Vista的那些文件就直接放在C:\Users下面了,比如什么下载,文档,音乐、图片什么的。一个简单的办法还是在那些文件夹上右键,选择属性/位置/然后按移动按钮。不过这样要一个一个的挪很多的文件夹,很麻烦。 Google了一下,网上被引用最多的是Joshua Mouch的这篇Change User Profile Folder Location in Vista。不过这个文章搞得太复杂了,是要把整个C:\Users给挪到别的地方去。作为个人的电脑,我只要把我自己的文件夹给挪走就可以了。所以决定用以前XP的方法试一试,结果还真成了。 假设目前要被挪的用户id叫sma。Vista上默认administrator账户是被禁用的,我也不想折腾他,所以创建一个新用户,比如叫root。给他Administrators的组权限。 注销当前用户,以root账号登录。 按Win-Pause键。或者计算机右键->属性。左侧栏选高级系统设置(看着好怕怕,好高级啊)。继续选高级tab,用户配置文件,点设置。 选择computer name\sma那个项目,点复制到…,然后把这个profile复制到任何想要的目录,比如D:\Profiles\sma。 把C:\Users\sma这个目录改叫sma.del 改注册表:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList,底下会有一些S-1-5-…..的长目录,其中一个ProfileImagePath的值是C:\Users\sma,把它改成刚才拷贝过去的位置(d:\profiles\sma)。 如果愿意,找个工具把注册表里的C:\Users\sma全部替换为D:\profiles\sma。我搜了一下,不是很多。大多数是Recent open files之类的,无关紧要。用windows的reg命令也可以做简单的搜索。 注销,用原来的账号登录,应该就可以了。如果一切ok,就可以删掉c:\Users\sma.del这个目录了。root账号不要删,下回ghost回来之后可能还有用。 完。

七月 28, 2009 · Shawn Ma

GTK 和 Qt

看到一则新闻。 诺基亚宣布Maemo换用Qt Maemo是针对互联网终端设备,基于GNU/Linux操作系统和GNOME/GTK+桌面技术的开源平台,于2005年首次推出,是众多支持Wi-Fi 的Internet Tablet 所用OS 的基础,如诺基亚N800和新款N810。 Nokia买了Trolltech,当然应该换用Qt。不过我很诧异Nokia居然在这个Maemo的早期版本居然真的把GTK+用起来了。要知道,我们在Moto花了很多的精力,也是想把GTK用在手机平台上,不过GTK根本不是为嵌入式系统设计的,有很多的问题,比如占用内存过多(开个buffer就上M),还有一些内存泄露的问题。桌面系统可能没什么,但是手机就比较麻烦了。Moto最终也没有解决这个问题,所以很诧异Nokia真的做了一个可以用的Maemo版本。 后来Moto北京这边都做Qt了,我还是比较喜欢Qt的。都什么时代了,还搞C语言啊。而且还用C语言做出来多态,实在是太变态了。最神奇的是,现在的Linux软件,大量的还是使用GTK开发的。我猜,可能是因为GTK不是被一个公司所拥有的吧?

七月 6, 2009 · Shawn Ma

推荐一下Balsamiq,很赞的UI草图设计软件

最近要开发一个J2EE的程序,做几个小页面,需要画几个原型。老板推荐了一个叫做Balsamiq的软件,不过是收费的,79$一个。好在”邪恶”的作者提供了一种免费获得注册码的办法,就是写一篇blog来介绍这个软件。 当然,我并不是想通过这种方式来获得注册码,因为我搞了一个反编译软件,偷偷的看了注册码是如何生成的。嗯,作者也很乖,连class的名字都叫KeyGenerator。于是我就给自己注册了一下,还真成功了。不过,这个软件真的很好用,画一个web页面的草图很容易,所以还是要推荐一下,就算是给自己补过吧。 这个软件是用Adobe AIR写的,跨平台性很好。这点Java真是没法比啊。 下面我画的两个草图,要是用word或者visio,也可以画,只是时间就海了去了。 当然,画Windows的界面也是没有问题。甚至,它还内置了IPhone的框架:

五月 12, 2009 · Shawn Ma

如何删除Add Remove Programs删不掉的程序

讨厌windows在c:\windows下放好多没用的东西,一个原因是总是ghost C盘,这样哪天洁癖发作或者被病毒搞了,直接ghost回来。于是就删删删,把C弄的比较小。经常删的或者挪地方的有: \pagefile.sys \hibernate.sys \MSOCache* \Windows目录下: $hg_mig$ $NtUninstallKb*$ Intaller ie7 Driver Cache ServicePackFiles SoftwareDistribution\Download system32\dllcache 这样大概能删掉至少1G的东西。有的东西不能删的,就在d盘建一个目录,用junction.exe(大约等于unix下的ln,sysinternals suite里面有)把它link过来。比如据说$hg_mig$就不能随便删。否则,windows update据说会有问题。 Installer目录也不能随便搞——我就总是因为搞它出问题。一次是安装新版的live messenger,旧版的因为我把Installer目录下的msp文件删了,无法卸载,新的也就没法装。重新安装一会也不行。很抓狂。不过这不算什么,我们总是可以蛮力删文件,并且改注册表——反正messenger的注册表项不是很多。但是今天遇到了一个麻烦的事情,装了office 2k3的sp3,然后删掉了msocache,并且不小心把installer目录弄没了——我junction到D盘了,但是不知怎么的内容没有了。于是每次启动outlook,MSI installer都跳出来,然后说某个安装盘找不到blah blah,很是piss off。卸载,没戏。直接安装覆盖?还是没戏。蛮力卸载?MS Knowledge base里也有,只是太麻烦了。不过还好,有万能的google。微软提供了一个windows installer cleanup tool,这个可以在installer数据库里删除某个程序的安装信息,就当这个程序没装过一样,然后就可以重新安装这个程序了。如果想卸载,那也没有任何问题。很好,很强大。 Windows installer cleanup tool: http://support.microsoft.com/kb/290301

四月 18, 2009 · Shawn Ma