Archive for January, 2009

纠结及其他

Monday, January 5th, 2009

07年初进入现在的公司,不久后用twisted写了一个http开发框架,提供内部系统之间的http接口服务。说是框架,其实很底层,基本相当于http服务器+URL分发。所以,开发的目的也很明确,就是性能。

在一年多的应用以来,发现很多问题,依次解决,改进了许多。现在提供一些性能参数吧,给需要对python开发系统,进行性能估算的朋友一点数据。

服务器就是四核志强 E5420,2.50GHz,内存4G。除了日志基本没有硬盘IO。

跑hello world的时候,50并发可以达到1800req/s。关闭accesslog日志以后,可以达到2600req/s。当然,这个服务器只能用一个CPU核心。

在应用中,是4个twistd实例在load balance后面一起干活,如上述配置的一台服务器。刚才统计出来的,过去24小时中处理完成约2000万次的http接口调用。调用的后面是有数据库查询的,一般来说都不只一次查询。实际看到的速度接近峰值的一小时内最高可以做约140万次http接口调用,折合389req/s。

总的来说,数据库依旧是几乎所有系统的瓶颈。

再就是高速运行情况下的问题。

默认的twisted使用的是select(),并发性能不要太指望。甚至并发数稍微高一点的时候就会报什么file descriptor out of range of select()的错误。总之默认的twisted能承受的并发数很有限。

twisted是有epoll支持的,你可以在启动twistd时选择epollreactor。不过貌似并不稳定。使用epoll()方式以后,我的印象大约是每几千个请求就会报出一个文件描述符的什么错误。另外,就是在关闭程序时有个语法错误,这个绝对是twisted的bug。从2.5.0升级到8.1.0之后,关闭服务器那个报出的bug依然存在。而twisted-8.1.0在启动时还要很傻的在安装位置写一个什么缓存文件。普通用户根本没有权限,所以每次启动服务器时都会报错,但是服务器可以照常启动。

我对twisted的容忍基本限于如此了。这段时间感觉libevent很优雅,假如我的雅兴还没过去,我会尝试给libevent附带的http服务器加上python binding,也许性能会更高。

成功卸载了FreeBSD下的scim了

Monday, January 5th, 2009

真不知scim的开发者为何方神圣,成功的将流氓软件的各项理念发扬到了开源领域。用尽龌龊的方法,确保他的scim可以给你捆绑的一塌糊涂,让你用尽方法都躲不掉。我前段时间配置自己的FreeBSD工作环境时就提到了,最后无论如何都没有办法在gvim不使用scim。查询google多日,发现另外一位仁兄也有此问题。连接 http://freebsd.chinaunix.net/bbs/thread-993367-1-1.html  。

有如他描述的那样,scim用尽方法将自己捆绑到系统中,绕过标准的环境变量配置,并且在所有GTK程序启动时捆绑启动。而且会破坏GTK程序的运行,一个输入法就可以干掉你整个程序。而且,只要你下狠心删除掉scim,系统的问题就自然解决了。

我前段时间配置的FreeBSD工作环境里gvim启动时一直没法去掉的提示信息,现在看来也是scim捆绑所导致的。现在删除scim以后两个问题都解决了。启动gvim时没有提示信息了,而且小企鹅fcitx也使用正常了。

删除方法很小白,简单的讲就是先找出所有scim的隐藏位置:

# pkg_info | grep scim

列出的软件包有4个,依次用强制删除即可:

# pkg_delete -f scim-1.4.7_1

注意必须是强制删除,因为其强制捆绑到了zh-auto-cn-l10n-1.1中。

为在FreeBSD下删除一个流氓软件而庆祝!不过在我的N810中,依然是scim,以后想想办法,丫的宁可用网页输入法也不用scim这个流氓软件。