2009年4月26日星期日

Erlang的Mailbox或者MQ的性能问题

最近看了几篇帖子

erlang-questions mailing list上的讨论Low disk logging performane in SMP
Caoyuan's Blog: A Case Study of Scalability Related "Out of memory" Crash in Erlang
Caoyuan's Blog: Async or Sync Log in Erlang - Limit the Load of Singleton Process

它们都是关于Erlang的mailbox性能问题的。所谓mailbox,就是Erlang的process用于存储其他进程发来的尚未处理的消息的容器。

根据这些讨论我有下面几点总结:
  1. 不要把mailbox“撑爆”:当mailbox太大的时候,selective receive的性能就会大打折扣。在第二篇帖子中,作者的甚至把error_logger的mailbox塞到机器out of memory!
  2. 如何避免:这几篇讨论这中“撑爆”的mailbox都是日志process:一个是error_logger,另一个是file_logger。日志进程的io操作都是比较耗时间的,而发送来的消息又太多太快,以至于写日志的进程根本来不及处理,消息只能在mailbox中积累。所以这在种consumer速度跟不上producer的情况,要尽量减轻consumer(这里是logger)的负担,让操作尽量在producer处完成(比如日志的格式化操作在发送者处做好,而不是在logger处)。另外还可以考虑把logger从singleton变成分布式的。
  3. SMP:多核的使用会加剧这种多producer单consumer情形的速度差距,导致性能下降,甚至内存溢出。
  4. 根据第一篇中的讨论,file:write似乎也是把write的请求发给一个file server,所以过多的请求也会导致write请求的处理效率低下。把几个write请求大包成一个write请求再发送过去或许是一个提高性能的办法。

2009年4月21日星期二

Ubuntu下录制桌面

为了项目演示,我需要在Ubuntu下把我操作的软件的过程录制下来。我使用了RecordMyDesktop这款开源软件,使用下面的命令来安装它:

sudo apt-get install recordmydesktop gtk-recordmydesktop

这个软件的GUI很简洁,非常容易上手。录制出的结果是ogg格式的,在Windows下可能无法播放。我使用了mencoder把ogg转换成avi格式。安装mencoder使用下面的命令:

sudo apt-get install mencoder

使用命令就可以把ogg格式的文件转换成avi:

mencoder -idx input.ogg -ovc lavc -oac mp3lame -o output.avi

我参阅了这个关于Ubuntu下录制桌面的英文blog:http://ubuntuchocolate.wordpress.com/2007/09/01/howto-screen-capture-in-ubuntu-feisty-fawn/

2009年4月7日星期二

美化Ubuntu桌面:Wallpaper Clock





Wallpaper Clock集漂亮的桌布和方便的时钟于一身,将美观和实用完美的结合在了一起。而且在Ubuntu下你可以完全免费地使用Wallpaper Clock来美化你的桌面。

安装过程我参考了这篇国外的blog

使用Wallpaper Clock需要完成三个方面的准备:
  1. 下载Wallpaper Clock:你可以从它的官方网站http://www.vladstudio.com/zh/wallpaperclock/上下载,现在已经有200+的壁纸了,每张都很精美,其中至少有一半是可以免费下载的。壁纸的文件扩展名是wcz。
  2. Wallpaper Clock screenlet:你下载的这些wcz文件不像图片文件可以直接作为桌面的,必须使用专门的软件才能够作为动态桌面呈现出来(每分钟刷新一次以更新壁纸上的时间)。在Windows,Mac,Linux下都有软件可以显示wcz文件,其中Linux下的是一个叫Wallpaper Clock screenlet的screenlet,你可以到http://gnome-look.org/content/show.php?content=66717下载它。这个东东也不能独立运行,它需要利用screenlets manager安装并使用它。
  3. 安装screenlets包:在ubuntu下使用命令"sudo apt-get install screenlets"来安装,这样你就得到了Screenlets Manager以及自带的一些screenlets。注意,在我的Ubuntu 8.04下从源上安装的Screenlets Manager不能使Wallpaper Clock screenlet正确工作。如果你也遇到了同样的问题,根据前面提到的那篇blog,你可以从https://launchpad.net/screenlets/trunk/0.0.12/下载并安装了0.0.12版本的screenlets。在我的Ubuntu 8.04下0.0.12版的screenlets包可以使Wallpaper Clock screenlet正确工作。
至于如何通过Screenlets Manager安装Wallpaper Clock screenlet,以及如何安装wcz为扩展名的壁纸,这里就省略了(也可以参看前面提到的blog),因为都只需要简单的GUI操作就可以完成。

Enjoy!