2010年3月13日

gnutls库

GNU TLS,是GNU的SSL实现,或者按GNU的意思是SSL的升级换代

posted @ 2010-03-13 10:04 lonelybyte 阅读(137) 评论(0) 编辑

2010年3月12日

程序员与青蛙公主

有一天,一个男人穿越森林的时候,听到一个细微的声音叫住他。他低头一看,是一只青蛙。
青蛙说:“如果你亲我一下,我会变成一个美丽的公 主哦。”
男人一言不发,把青蛙捡起来,放入口袋。
青蛙又说:“如果你亲我一下,我会变成一个美丽的公主哦。而且,我 会告诉我遇到的每一个人,你是多么聪明和勇敢,你是我的英雄。”
男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
“如 果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一星期。”
男人又把青蛙拿出来,对着它微微一笑,把它放回口袋。
“如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一年,而且你可以对我做任何事。”
再一次的,男人把青 蛙拿出来,对着它微微一笑,又把它放回口袋。
最后,青蛙无力地问:“我开出了这么好的条件,为什么你还不肯吻我?”
男 人说:“我是一个程序员,我可没时间和什么公主鬼混。不过,拥有一个会说话的青蛙,倒是蛮酷的。”

posted @ 2010-03-12 22:01 lonelybyte 阅读(25) 评论(0) 编辑

2010年3月10日

重建内核选项指南

谈到重建,大家都有一种摸不着头脑的感觉,原因是内核选项给

人实在太多的无赖,不光需要知道那一项是干什么的,还要知道

自己的硬件到底是什么样的。下面的解说只是给大家作一个参

考,别人领进门,修行在个人,能否配置好自己的内核,做到全

面而短小,这全要靠自己。有一点是要提醒大家的:内核的配置

是一件很考验人的意志的任务,不要因为几次失败而放弃!笔者

也曾经经历过那段难熬的岁月,所以提醒大家–不要气馁。

prompt for development and/or incomplete code/drivers

很多参考书上说这是那些开发人员认为还不是很稳定的功能,但

是根据我的经验,这个是应该选的一个选项,因为现代的LINUX是

建立在这些基础上的,所以应该可以回答Y,除非你只是想使用

LINUX中已经完全定型的东西,但性能肯定不会好到哪,而且对系

统特性的支持也不会好。

processor family (386,486/cx486,586/k5/5×86/6×86,pentinum/k6/tsc,

ppro/6×86)

这应该没有太多可说的吧,选择你的CPU的种类,BIOS可以自检得

到,注意系统的启动信息。需要注意的是不能选择比你的CPU类型

还高级的CPU,否则可能不能正常工作。

math emulation

模拟数学协处理器,如果你的机器没有数学协处理器,那就选上

以提高性能,但486以后数学协处理器就集成到CPU内部了,应该是

用不上的,所以一般的选择是N。当然选上也不会有什么问题,除

了内核稍稍变大外。

mttr(memory type range register) support

这个选项是用来启动pentinum pro和pentinum II 的特殊功能,如果你用

的不是这类CPU就选N,否则也仅仅是使内核变大而已。

symmetric multi-processing support

同步处理器支持,如果你有多个CPU就选上吧。

enable loadable module support

这会启动动态载入额外模块的功能,所以一定选上。

set version information on all symbols for modules

这个选项可以为某个版本的内核而编译的模块在另一个版本的内

核下使用,但一般用不上。

kernel module loader

如果你启用这个选项,你可以通过kerneld程序的帮助在需要的时候

自动载入或卸载那些可载入式的模块。建议选上。

networking support

如果你用到任何网络就应该选上

pci bios support

这个一般是应该选上的,除非你用没有任何PCI设备的机器。PCI

BIOS是用来侦测并启用PCI设备的。

pci bridge optimization(v1.3)

当这个选项被启动时,操作系统会对从CPU和系统内存在PCI总线

来往的数据做最佳化,这个功能已经完成实验阶段,使用起来应

该很安全,而且还可增进系统的效率。

system v ipc

起用这个选项可以使内核支持System V 的进程间通信的功能

(IPC),有些从System V转移过来的程序会需要这个功能,建议启

用该功能。

sysctl support

除非你的内存少的可怜,否则你应该启动这个功能,启用该选项

后内核会大8K,但能让你直接改变内核的参数而不必重新开机。

kernel support for elf binaries

该选项让你的系统得以执行用ELF格式存储的可执行文件,而ELF

是现代LINUX的可执行文件、目标文件和系统函数库的标准格式。

当操作系统要和编译器以及连接器合作时会需要这些标准,所以

应该回答Y。

compile kernel as elf

这选项让你的内核本身以ELF的格式编译,如果你的系统上的过程

gcc默认产生ELF格式的可执行文件,那么你就应该启动这个选项。

先看看你的编译器的版本再决定。

parallel port support

如果你有任何并行口的设备并且想让LINUX使用,那么就可以启用

这个选项。LINUX不仅可以使用并口的打印机,还可以支持PLIP

(一种为并行口而设计的网络通讯协定),ZIP磁盘驱动器、扫描

仪等。在大多情况下,你需要额外的驱动程序才能使用外接的并

口设备。

plug and play support

支持PNP设备并非Microsoft的专利,如果你要让LINUX也支持PNP设

备,只要启用该选项就可以,但有些情况下会和其他设备产生冲

突(I/O,DMA,IRQ等)。这个选项对PCI设备没有影响,因为他们

天生就是PNP设备。

normal floppy disk support

除非你不想在LINUX下使用软盘,否则就应该回答Y。但对于一些

不需要支持软盘驱动器的系统而言,这个选项可以节省一些内

存。

enhanced ide/mfm/dll disk support

除非你不需要MFM/DLL/IDE硬盘的的支持,否则就应该回答Y,但如

果你只有SCSI的硬盘,关掉这个选项会比较安全。

enhanced ide/mfm/dll cdrom support

和上面的类似,只不过是对CDROM的支持而已。

enhanced ide/mfm/dll tape support

一般没有多少人在用磁带机吧,所以回答N是比较好的答案。

enhanced ide/mfm/dll floppy support

这个设备好象一般也没有人用,所以也可以回答N。

xt harddisk support

如果你有这种石器时代的XT硬盘,那么恭喜你你可以用上他了。

parallel port ide device support

LINUX是支持这种很新的并口的IDE设备的,如果你有的话就用上

吧。

networking options

如果你在前面选了支持网络的话,在这里会回答很多问题。除非

你有特别的需求,否则使用默认的选项应该就足够了。

scsi support

如果你有任何一种SCSI控制卡,这个选项就应该回答Y。事先搞清

楚你的硬件的类型,因为这些问题都是针对特定的SCSI控制芯片和

控制卡的,如果你不确定自己使用的是哪一种,查看你的硬件的

说明文件或者LINUX的HOWTO文档。同样也会让你回答很多SCSI设

备的支持(硬盘、CDROM、Tape、floppy等),依据你的情况选择。

如果你没有SCSI设备的话,建议不要支持,因为这会节约很多内核

空间。

network device support

这里面有很多关于网络控制卡的问题,如果你无法确定如何正确

选择,查看硬件文档或LINUX HOWTO文档。

amateur radio support

这个选项可以用来启动无线网络的基本支持,目前的无线网络可

以通过公众频率传输数据,如果你有此类设备就可以启用,具体

请参考AX25和HAM HOWTO 文档。

isdn subsystem

如果你有ISDN硬件就应该启用该选项并安装合适的硬件驱动程

序,你应该还会需要启用Support synchronous PPP选项(参考PPP over

ISDN)。

old cd-rom drivers

这是针对一些特殊光盘驱动器程序的问题,如果你有IDE或SCSI的

CDROM控制卡,那么就不用启用该选项了。

character devices

LINUX支持很多特殊的字符设备,例如并口、串口控制卡、QIC02磁

带驱动器以及特定界面的鼠标,此外对于游戏杆和影象摄取和麦

克等也在这里面,依据你自己的情况选者吧。

filesystems

这是一系列内核所支持的各文件系统的问题,对ext2 /proc文件系统

是一定应该支持的,有光驱还应该支持ISO9660(或模块支持),

有WINDOWS或DOS分区并且想在LINUX下访问他们也可以进行支

持。

console drivers

你至少应该支持VGA text console,否则你无法从控制台使用LINUX。

sound card support

在这里回答Y会出现很多关于声卡的问题,根据你自己的情况来配

置。

kernel profiling support(v1.3)

这个选项可以开启内核做效率统计的功能,并且会提供其他在为

系统侦错时有用的信息。这些功能会需要付出一些代价并造成系

统执行得较为缓慢,除非你正在研究内核的某个问题,否则你应

该回答N。

kernel hacking

如果你正打算深入研究自己系统上运行的LINUX如何运作,这里有

很多选项,但一般没有必要的话可以全部关掉。

作者对文章的正确性不做任何保证,如果你发现本文的不足或错

误,请更正并重新发布。

欢迎转载并进行修正,转载及少量修正请注明原作者,如果对本

文进行了任何修改,请寄一份给原作者,谢谢。

posted @ 2010-03-10 20:08 lonelybyte 阅读(41) 评论(0) 编辑

2010年2月21日

MySQL yaSSL库证书解析远程溢出漏洞


发布日期:2010-01-26

BUGTRAQ ID:37943

受影响的软件及系统:
====================
MySQL AB MySQL 5.5-ms2
MySQL AB MySQL 5.1.x
MySQL AB MySQL 5.0.x

综述:
======
MySQL 是一款使用非常广泛的开放源代码关系数据库系统,拥有各种平台的运行版本。MySQL所捆绑的yaSSL库在解析畸形证书时存在缓冲区溢出漏洞,如果数据 库在编译时加入了对SSL的支持并且配置打开了SSL功能,远程攻击者可能利用此漏洞无需认证通过提交畸形的证书内容触发溢出,控制程序流程在服务器上执 行任意指令,从而最终控制MySQL服务器。

分析:
======
漏洞存在于MySQL所捆绑的yaSSL库中,其在解析 畸形证书内容时存在一个稳定的栈缓冲区溢出,其他使用yaSSL库的网络应用也应该受此漏洞影响。默认MySQL没有打开SSL通信功能,如果MySQL 服务器在配置文件中指定了服务器端的证书就打开了对SSL通信的支持,远程攻击者通过在会话中提交畸形的证书内容就能导致执行任意指令,此漏洞存在于通信 通道建立的阶段,发生于用户认证之前,因此攻击者无需认证只要能够连接访问MySQL服务器就能利用。

大量Linux发行版所带的MySQL服务器编译时默认就加入了对yaSSL的支持,因此只要在配置时打开了SSL功能就受此漏洞的影响,另 外,Windows版本的MySQL也受此漏洞影响。

此漏洞的利用代码已经公开,甚至已经被加入了商业的漏洞利用工具包,利用此漏洞进行的攻击可能趋于活跃,而且数据库服务器一般包含了大量有用信息,所以此 漏洞所造成的总体威胁不可忽视。

解决方法:
==========
* 设置防火墙规则,禁止不可信任的IP访问MySQL的服务端口(默认为TCP/3306)。

* 关闭MySQL对SSL通信功能的支持:

  在配置文件 mysql.cnf 文件中,找到并注释掉类似如下的指定证书路径的行:
  
  ssl-ca=/etc/mysql/ca.pem
  ssl-cert=/etc/mysql/cert.pem
  ssl-key=/etc/mysql/key.pem
  
  重启MySQL服务。

厂商状态:
==========
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.mysql.com/

附加信息:
==========
1. http://www.nsfocus.net/vulndb/14404
2. http://intevydis.blogspot.com/2010/01/mysq-yassl-stack-overflow.html

声 明
==========

本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的 后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必 须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。

posted @ 2010-02-21 15:19 lonelybyte 阅读(39) 评论(0) 编辑

2010年2月8日

系统监控:msn在线机器人实时报警

一、实际需求
在应用各种监控软件(比如:cacti、nagios、sitescope等)的时候,我一般都会用到它的email阀值报警功能。如果这时候再加上一个 msn在线监控机器人为你把关,第一时间给你发出msn报警信息,是不是能让你更快的处理问题呢。以下我为大家介绍一个msn command line 的小程序来实现这个功能。
软件下载地址:sendMsg

二、运行环境
一个支持php的系统环境就可以啦,当然要能上网,不然怎么发消息呢。
我的做法是和cacti监控服务器放一起,不需要额外的设备和资源投入。
注册一个msn的帐号用于监控机器人。比如:test@test.com 密码:123456
需要收到消息的msn帐号必须加监控帐号test@test.com为好友,不然收不到消息。

三、sendMsg用法
sendMsg.zip包中所有文件如下:

下载: code.txt
# ls -l sendMsg/
-
rw-r--r-- 1 root root 1213 Jul 29 2007 index.php //测试页面,web中打开开始测试;很容易做。
-
rw-r--r-- 1 root root 3894 Jul 29 2007 msnpauth-1.1.3.php
-
rw-r--r-- 1 root root 3372 Jul 29 2007 msnpauth.php
-
rw-r--r-- 1 root root 4586 Jul 29 2007 sendMsg.php
-
rw-r--r-- 1 root root 223 Jul 29 2007 simple.php
-
rw-r--r-- 1 root root 1424 Jul 29 2007 template.tpl

该程序也是通过登录msn服务器、建立IM会话,发送消息;
基本PHP语法如下:

下载: code.txt
$sendMsg = new sendMsg();
$sendMsg->login('test@test.com', '123456');
//刚才建立的用于举例的
msn监控机器人帐号
$sendMsg->createSession('recipient@hotmail.com');
//接受信息人的
msn帐号
$sendMsg->sendMessage('message', 'Times New Roman', 'FF0000');
//第一个是具体信息内容,后面可以设定字体和颜色;
$sendMsg->sendMessage(iconv("GBK", "UTF-8", 测试), 'Times New Roman', '008000');
//也利用
iconv转换gbkutf8来发送中文信息;

效果如下:

四、实际应用
这里是我自己写的一个应用发送msn信息的php脚本:仅供参考,如果大家有更好请和我交流。

下载: code.txt
#!/usr/bin/php
<?
if ($argc != 3) {
die("Usage: send_cndmonitor.php <msn-address> <messages>\n");
}
array_shift($argv);
$msnaddr = $argv[0];
$messages = $argv[1];
include('sendMsg.php');
$sendMsg = new sendMsg();
$sendMsg->login('test@test.com', '123456');
$sendMsg->createSession($msnaddr);
$sendMsg->sendMessage($messages, 'Times New Roman', '008000');
?>

主要是为了能被其他脚本调用,用于发送一个报警信息。缺点是不能判定错误,所以实际运用中存在故障,需要网络流畅的环境下使用。

我们的生产环境已经存在大量的监控系统,所以针对错误信息已经整理到数据库中,因此我只需要从数据库导出目前存在error信息的文本文件,然后根 据节点位置发送给相关维护负责人即可。

为了能判定和确保发送正确,我利用sendMsg中的index.php的页面和shell脚本相结合来循环发送,实在抱歉本人PHP程度有限;
脚本如下:(这是我实例中使用的一个工作脚本,仅供大家借鉴)

下载: code.txt
#!/bin/sh
wget --user=monitor --password=123456 http://127.0.0.1/monitor/msn.txt -O /var/www/html/sendMsg/msn.txt.1 >/dev/null 2>&1
#下载msn要发送的信息,因为页面都是认证的所以用了wget的user和 password;
now=`date +%Y-%m-%d-%H:%M`
[ -f /var/www/html/sendMsg/msn.txt ] && oldmd5=`md5sum var/www/html/sendMsg/msn.txt |awk '{print $1}' |tee /var/log/cdn_status_old.md5` || exit 0
[ -f /var/www/html/sendMsg/msn.txt.1 ] && newmd5=`md5sum var/www/html/sendMsg/msn.txt.1 |awk '{print $1}' |tee /var/log/cdn_status_new.md5` || exit 0
SA=(admin1 admin2 admin3 admin4)
# 相关负责人列表和下载的msn信息的中的名字对应;
msnaddr=(admin1@msn.com admin2@msn.com admin3@msn.com admin4@msn.com)
# 相关负责人的msn帐号和SA变量中的的名字顺序一一对应;
sendMsg()
{
num=0
while [ $num -lt 1 ];
do
wget --post-data "sender=test@test.com&password=123456&recipient=${1}&message=${2}" http://127.0.0.1/sendMsg/index.php -O /var/www/html/sendMsg/index.php.1 >/dev/null 2>&1
# 使用wget post-data发送post参数给index.php页面,用以发送msn信息。
if [ -f /var/www/html/sendMsg/index.php.1 ]; then
if cat /var/www/html/sendMsg/index.php.1 |grep -i successfully >/dev/null 2>&1;then
num=1 #判断 信息发送成功
elif cat /var/www/html/sendMsg/index.php.1 |grep -i "The user appears to be offline" >/dev/null 2>&1;then
num=1 #判断msn接受人为是否在线状态
echo "The user is offline."
exit 0
elif cat /var/www/html/sendMsg/index.php.1 |grep -i "Something went wrong trying to connect to the server" >/dev/null 2>&1;then
num=1 #判断 msn 服务器存在连接问题
echo "MSN server is wrong."
exit 0
else
num=0 #除了 以上三种情况退出循环外,其他情况重试。
fi
rm -f /var/www/html/sendMsg/index.php.1
else
num=0
fi
done
}
 
if [[ $oldmd5 == $newmd5 ]];then #校验 msn的信息是否是已经发送过的,主要是为了不重复发送错误信息。
rm -f /var/www/html/sendMsg/msn.txt.1
exit 0
else
mv /var/www/html/sendMsg/msn.txt /var/www/html/sendMsg/bak/msn$now.txt -f
mv /var/www/html/sendMsg/msn.txt.1 /var/www/html/sendMsg/msn.txt -f
# 备份已发送的msn错误信息
 
fi
 
for i in `seq 0 1 3` #根据维 护人员的数量进行判断和循环
do
if cat /var/www/html/sendMsg/msn.txt |grep -i ${SA[$i]}; then
messages=`cat /var/www/html/sendMsg/msn.txt |grep -i ${SA[$i]}`
sendMsg "${msnaddr[$i]}" "$messages"
else
continue
fi
done

加入到crontab每5分钟执行一次;考虑维护人员的上线时间(最好是24H值班msn,那就不存在这个问题)设定执行时间为每周1到5的9点到 18点;

下载: code.txt
*/5 9-18 * * 1-5 /var/www/html/sendMsg/send_report.sh

实际应用大家可以根据自己的情况进行调整,我这里只是告诉大家怎么使用sendmsg,举了一个简单的实例帮助大家理解和应用。

如果懂php语言的可以把这个作为cacti的一个插件使用,那样效果就更棒啦~

posted @ 2010-02-08 17:40 lonelybyte 阅读(237) 评论(0) 编辑

系统监控:linux命令行-飞信客户端发送免费报警短信

一、软件环境(centos 5为例)
这里向大家推荐的是飞信机器人的软件,支持linux、命令行下的飞信、完全免费(目前为止);
官网地址:http://www.it-adv.net/
支持库安装:
需要Glibc2.4以上的版本;centos5默认安装的Glibc2.5,所不需要额外升级;
目前网上的安装文档只有ubuntu的,至于redhat、fedora、centos都没有相关安装文档,我在安装的过程中遇到很多库的问题,所以在这 里一并给大家进行介绍;

二、安装过程
下载包地址 LINUX X86/32(REDHAT ES4X32):支 持库 最 新程序fetion20080522004-linrh4.tar.gz
其中支持库和安装包内容如下:

下载: code.txt
# tar zxvf libraryrh4x32.tar.gz
libACE-5.6.5.so
libACE_SSL-5.6.5.so
libcrypto.so.0.9.7a
libssl.so.0.9.7a
 
# tar zxvf fetion20080522004-linrh4.tar.gz
./
install/
./
install/www/
./
install/www/index.html
./
install/www/css/
./
install/www/css/scheme.css
./
install/www/css/main.css
./
install/www/css/print.css
./
install/www/css/main-msie.css
./
install/www/images/
./
install/www/js/
./
install/www/js/jquery.js
./
install/socket_interface/
./
install/socket_interface/socket_demo.php
./
install/Readme.txt
./
install/sound/
./
install/sound/smile8.wav
./
install/sound/message.wav
./
install/sound/smile1.wav
./
install/sound/login.wav
./
install/sound/openchatwin.wav
./
install/sound/closechatwin.wav
./
install/fetion
./
install/plugins/
./
install/plugins/plugin_contact_update
./
install/plugins/plugin_buddy_application
./
install/plugins/plugin_message
./
install/plugins/plugin_invite
./
install/plugins/plugin_timer
./
install/conf/

把支持库复制到/usr/lib/目录下,并作软链接如下:

下载: code.txt
cp lib*so* /usr/lib/
ln -s /usr/lib/libcrypto.so.0.9.7a /usr/lib/libcrypto.so.4
ln -s /usr/lib/libssl.so.0.9.7a /usr/lib/libssl.so.4

设定lib库配置文件

下载: code.txt
#vi /etc/ld.so.conf
#增加一条
/
usr/lib/
#保存退出后,执 行
#ldconfig

fetion的目录结构:
.\Readme.txt: 本说明文件
.\fetion:主程序
.\sound\*.wav:各种音效文件,您可以用自己喜欢的文件替换
.\plugins\plugin_*: 插件程序,您可以修改插件以达到自己的各性化需求

我在安装中遇到缺少krb5的库问题,这里写一下解决方法:
错误如下:
./fetion: error while loading shared libraries: libgssapi_krb5.so.2: cannot open shared object file: No such file or directory
安装一下krb5-libs包就可以解决啦:

下载: code.txt
yum install krb5-libs

完成之后测试,安装是否成功;执行

下载: code.txt
#cd install
# ./
fetion -h
 
Usage:
    
fetion -h
        -
h: help
    
fetion -u mobile -p pwd [-b batchfile] [-EN] [-d]
    
fetion -u mobile -p pwd [-b batchfile] [-EN] [-d]
        -
u: Fetion user account(only supports mobile phone No.)
        -
p: Account password
        -
b: Batch file name
        -
d: Debug on and write logs to [mobile]-debug.log
        -
EN: English

三、实际测试
登录飞信默认是中文utf8的,如果linux系统不支持utf8会出现乱码:我使用english的方式来登录啦。
测试帐号:13713718888
密码:123456 (如果密码中含有特殊字符,请使用单引号)

下载: code.txt
./fetion -u 13713718888 -p 123456 -EN

登录后输入?获得帮助

下载: code.txt
****************************************************************
指 令                    指令说明
list                     好友列表: list
sms                    发送短信: sms 飞信号/手机号/编号 短信内容(换行请用\n代替)
chat                   在线消息: chat 飞信号/手机号/编号 短信内容(换行请用\n代替)
status                 在线状态: status online/busy/away/hidden [个性化信息]
add                    添加好友: add 飞信号/手机号 申请信息 本地呢称
del                     删除好友: del 飞信号/手机号/编号
invite                 邀请好友: invite 手机号 您的姓名(邀请好友开通飞信)
autoaccept         自动接受: autoaccept on/off/status 自动接受加为好友申请
myinfo                修改资料: myinfo nickname/impresa 内容(呢称/心情)
help                   帮助菜单: help/?
exit                   退出系统: quit/exit
****************************************************************
 
sms 137******** "this is test message" # 这个就是我们需要的发送短信的指令啦!

脚本测试:
可以使用fetion的-b参数来实现p处理;
举例如下:

# vi p.sh
sms 13712312311 “msyqlserver is down”
sms 13712312312 “db1 is not running”
sms 13712312313 “warning db2 disk3 is full”
保存后执行:
./fetion -u 13713718888 -p 123456 -b p.sh
就是一次给3个admin发出报警信息。

还有许多插件的功能,我会在下次实际应用中写出日志和大家一起研究;
在初步接触中,发现可以实现一些交互信息的查询,比如直接向短信机器人发指令得到某台服务器的运行状态等。

posted @ 2010-02-08 17:39 lonelybyte 阅读(344) 评论(0) 编辑

三款免费的PHP加速器:APC、eAccelerator、XCache比较

前几天给 Nova 的缓存系统添加了 Memcache 支持。但是这玩意儿对个人博客系统来说可能不太合适(哪天 XKLog 推出多用户版本了可能会派上用场),事实上,就我自己试用而言,单机情况下使用 Memcache 反而可能使性能下降(使用 SHMOP 时运行时间在 20 微秒左右,使用 Memcache 时运行时间在 40 微秒左右)。于是又准备鼓捣一下如上三个 PHP 加速器。

一、PHP加速器介绍

        PHP加速器是一个为了提高PHP执行效率,从而缓存起PHP的操作码,这样PHP后面执行就不用解析转换了,可以直接调用PHP操作码,这样速度上就提 高了不少。

        Apache中使用mod_php的请求、响应执行流程:

  1、Apache接收请求。
2、Apache传递请求给mod_php。
3、mod_php定位磁盘文件,并加载到内存中。
4、 mod_php编译源代码成为opcode树。
5、mod_php执行opcode树。

       PHP加速器相应的就是第四步,它的目的就是防止PHP每次请求都重复编译PHP代码,因为在高访问量的网站上,大量的编译往往没有执行速度快呢?所以这 里面有个瓶颈就是PHP的重复编译既影响了速度又加载了服务器负载,为了解决此问题,PHP加速器就这样诞生了。

二、PHP加速器安装与配置

        1、安装配置APC

             APC全称是Alternative PHP Cache,官方翻译叫”可选PHP缓存”,它是PHP PECL中的一个扩展,好像是facebook在使用它,下面开始安装(ubuntu环境): 


$wget http://pecl.php.net/get/APC-3.0.19.tgz
$tar xvzf APC-3.0.19.tgz
$cd APC-3.0.19/APC-3.0.19
$/usr/local/php/bin/phpize
$./configure –enable-apc –enable-apc-mmap –with-php-config=/usr/local/php/bin/php-config
$make
$sudo make install

下面我们再配置APC,因为我的PECL扩展路径改变了,所以我得移动下编译好的文件:
$sudo mv /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/apc.so /usr/local/php/lib/php/extensions/PECL

然后我们再编辑php.ini文件进行配置,请把下面的代码加入到php.ini中即 可:
extension_dir = “/usr/local/php/lib/php/extensions/PECL”
extension = apc.so
; APC
apc.enabled = 1
apc.shm_segments = 1
apc.shm_size = 64
apc.optimization = 1
apc.num_files_hint = 0
apc.ttl = 0
apc.gc_ttl = 3600
apc.cache_by_default = on

     这样重启apache就会在phpinfo()信息中显示。

       2、安装配置eAccelerator

          eAccelerator的前身其实是truck-mmcache,因为开发truk-mmcache的人被Zend给招安了,所以开发 eAccelerator的人继承了truk-mmcache的一些特性,设计出eAccelerator加速器。安装如下:
$wget http://jaist.dl.sourceforge.net/sourceforge/eaccelerator/eaccelerator-0.9.5.tar.bz2
$tar -jxf eaccelerator-0.9.5.tar.bz2
$cd eaccelerator-0.9.5
$/usr/local/php/bin/phpize
$./configure –enable-eaccelerator=shared –with-php-config=/usr/local/php/bin/php-config
$make
$sudo make install
$sudo mv /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so /usr/local/php/lib/php/extensions/PECL

将下面代码加入php.ini文件中
extension = eaccelerator.so
; eAccelerator
eaccelerator.shm_size = “16″
eaccelerator.cache_dir = “/tmp/eaccelerator”
eaccelerator.enable = “1″
eaccelerator.optimizer = “1″
eaccelerator.check_mtime = “1″
eaccelerator.debug = “0″
eaccelerator.filter = “”
eaccelerator.shm_max = “0″
eaccelerator.shm_ttl = “0″
eaccelerator.prune_period = “0″
eaccelerator.shm_only = “0″
eaccelerator.compress = “1″
eaccelerator.compress_level = “9″

创建缓存目录,重启apache

$sudo mkdir /tmp/eaccelerator
$sudo chmod 777 /tmp/eaccelerator
$sudo /usr/local/apache/apachectl restart

在phpinfo()检查是否安装成功.

3、安装配置XCache

XCache作为国人自己开发的东西,做小菜鸟的我也感到骄傲,而且XCache无论在速度还是性能上都做的不错。下面就赶紧让我们品尝它吧!

$wget http://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gz
$tar xvzf xcache-1.2.2.tar.gz
$cd xcache-1.2.2
$/usr/local/php/bin/phpize
$./configure –enable-xcache –enable-xcache-coverager –with-php-config=/usr/local/php/php-config
$make
$sudo make install
$sudo mv /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/xcache.so /usr/local/php/lib/php/extensions/PECL

在php.ini添加配置信息:

extension = xcache.so
; xcache
xcache.admin.user = “admin”
xcache.admin.pass = “(执行) echo ’(你的密码)’|md5sum(得出的密文)”
;
xcache.size = 24M
xcache.shm_scheme = “mmap”
xcache.count = 2
xcache.slots = 8k
xcache.ttl = 0
xcache.gc_interval = 0

xcache.var_size = 8M
xcache.var_count = 1
xcache.var_slots = 8k
xcache.var_ttl = 0
xcache.var_maxttl = 0
xcache.var_gc_interval = 300
xcache.test = Off
xcache.readonly_protection = On
xcache.mmap_path = “/tmp/xcache”
xcache.coredump_directory = “”
xcache.cacher = On
xcache.stat = On
xcache.optimizer = Off
;
xcache.coverager = On
xcache.coveragedump_directory = “”

创建缓存目录,重启apache

$sudo mkdir /tmp/xcache
$sudo chmod 777 /tmp/xcache
$sudo /usr/local/apache/bin/apachectl restart

去查看phpinfo()信息吧!

三、PHP加速器测试

1、测试环境

硬件: AMD Athlon 64 X2 Dual Core Processor 4400+ @ 2.2GHz CPU, 2GB 内存. 160GB SATA 硬盘

软件: Linux Ubuntu server Gutsy 7.10, Apache 2.2.4, MySQL 5.0.45 和 PHP 5.2.3

测试指令: ab -c5 -n3000 http://example.com/ (我们使用的是Apache Benchmark (ab) 工具,并发连接为5,3000次请求)

2、测试结果

无任何加速器:

Document Path: /
Document Length: 21757 bytes
Concurrency Level: 5
Time taken for tests: 288.255212 seconds
Complete requests: 3000
Failed requests: 0
Write errors: 0
Total transferred: 66777000 bytes
HTML transferred: 65271000 bytes
Requests per second: 10.41 [#/sec] (mean)
Time per request: 480.425 [ms] (mean)
Time per request: 96.085 [ms] (mean, across all concurrent requests)
Transfer rate: 226.23 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.5 0 19
Processing: 181 479 186.0 444 1822
Waiting: 166 461 184.7 427 1708
Total: 181 479 186.0 444 1822
Percentage of the requests served within a certain time (ms)
50% 444
66% 525
75% 577
80% 619
90% 732
95% 819
98% 946
99% 1012
100% 1822 (longest request)

APC加速器:

Document Path: /
Document Length: 21757 bytes
Concurrency Level: 5
Time taken for tests: 98.530068 seconds
Complete requests: 3000
Failed requests: 0
Write errors: 0
Total transferred: 66777000 bytes
HTML transferred: 65271000 bytes
Requests per second: 30.45 [#/sec] (mean)
Time per request: 164.217 [ms] (mean)
Time per request: 32.843 [ms] (mean, across all concurrent requests)
Transfer rate: 661.84 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 2
Processing: 58 163 71.2 155 2452
Waiting: 53 158 69.6 150 2329
Total: 58 163 71.2 155 2452
Percentage of the requests served within a certain time (ms)
50% 155
66% 178
75% 193
80% 204
90% 235
95% 258
98% 285
99% 302
100% 2452 (longest request)

eAccelerator加速器:

Document Path: /
Document Length: 21757 bytes
Concurrency Level: 5
Time taken for tests: 95.983986 seconds
Complete requests: 3000
Failed requests: 0
Write errors: 0
Total transferred: 66777000 bytes
HTML transferred: 65271000 bytes
Requests per second: 31.26 [#/sec] (mean)
Time per request: 159.973 [ms] (mean)
Time per request: 31.995 [ms] (mean, across all concurrent requests)
Transfer rate: 679.39 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 3
Processing: 57 159 91.3 148 3830
Waiting: 50 152 89.8 142 3704
Total: 57 159 91.3 148 3830
Percentage of the requests served within a certain time (ms)
50% 148
66% 174
75% 193
80% 205
90% 239
95% 263
98% 289
99% 309
100% 3830 (longest request)

XCache加速器:

Document Path: /
Document Length: 21757 bytes
Concurrency Level: 5
Time taken for tests: 99.76300 seconds
Complete requests: 3000
Failed requests: 0
Write errors: 0
Total transferred: 66777000 bytes
HTML transferred: 65271000 bytes
Requests per second: 30.28 [#/sec] (mean)
Time per request: 165.127 [ms] (mean)
Time per request: 33.025 [ms] (mean, across all concurrent requests)
Transfer rate: 658.19 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 2
Processing: 59 164 83.4 155 3367
Waiting: 52 156 66.4 148 1802
Total: 59 164 83.4 155 3367
Percentage of the requests served within a certain time (ms)
50% 155
66% 178
75% 196
80% 206
90% 237
95% 263
98% 287
99% 305
100% 3367 (longest request)

3、结果摘要

  请求时间(秒) 单次请求时间(毫秒) 最大内存占用(MB) 最小内存占用(MB)
None 10.41 96.08 24 24
APC 30.45 32.84 21 21
eAccelerator 31.26 31.99 23 18
XCache 30.28 33.02 29 19

四、PHP加速器比较结果总结

     1、通过测试得出eAccelerator在请求时间和内存占用综合方面是最好的。

     2、通过测试得出使用加速器比无加速器在请求时间快了3倍左右。

     3、通过各个官方观察,XCache是更新最快的,这也说明最有发展的。

        以上是总结结果,你也许会问我到底用那个加速器好呢?我只能告诉你,首先,用一定比不用好,其次每个加速器还有一些可以调优的参数,所以要根据你的系统环 境而定,然后,我个人觉得你可以详细研究下eAccelerator和XCache,这两款潜力还是很大的,最后我从比较专业的测试网站搞了一张结果图:

posted @ 2010-02-08 17:02 lonelybyte 阅读(439) 评论(0) 编辑

2010年1月16日

安装Ailurus 10.01.1

摘要: sudo add-apt-repository ppa:ailurussudo apt-get updatesudo apt-get install ailurus阅读全文

posted @ 2010-01-16 08:56 lonelybyte 阅读(93) 评论(0) 编辑

ubuntu9.10下如何安装php

摘要: 1. 首先安装SSH sudo apt-get install ssh 2.安装MySQL sudo apt-get install mysql-server-5.1 3.安装Apache sudo apt-get install apache2 4.安装PHP sudo apt-get install php5 libapache2-mod-php5 5.重启Apache sudo /etc/i...阅读全文

posted @ 2010-01-16 08:20 lonelybyte 阅读(259) 评论(0) 编辑

jQuery插件Datepicker日期选择器实现Javascript自定义日期时间选择功能

摘要: 这里介绍一个jQuery插件Datepicker日期选择器工具,主要用于实现Javascript自定义日期时间选择的功能,以提高用户体验。 Javascript的日期选择器工具很多,jQuery插件Datepicker日期选择器功能强大,同时可自定义日期时间配置,调用非常方 便,Datepicker日期选择器效果图如下: 使用说明 需要使用jQuery库文件(目前版本1.3)和jQuery Da...阅读全文

posted @ 2010-01-16 06:46 lonelybyte 阅读(5271) 评论(0) 编辑

<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

导航

统计

公告

昵称:lonelybyte
园龄:2年1个月
粉丝:0
关注:0

搜索

 
 

常用链接

我的标签

随笔分类

随笔档案

最新评论

阅读排行榜

评论排行榜

推荐排行榜