晚上想写一个关于Echo服务器的压力测试,这一写,就出现不少问题,先是epoll的LT和EG问题,这个一会儿再说,然后改好了又遇到一个诡异的问题:在一个程序中反复用socket连接的话,到了28231左右就会莫名奇妙的断掉,提示:Cannot assign requested address,我在google,baidu搜索了这个数值半天,都没有什么结果。
终于找到了一篇文章,转载下来,感谢原作者:
http://hi.baidu.com/jabber/blog/item/da445182769[......]
Author Archives: coder4
强烈推荐一个WP的DB缓存插件!
DB Cache Reloaded,这个可以把SQL查询缓存起来,对我的Blog相当有用,原来打开龟速,现在很快了,可以从30Query->7Query,感觉还是非常好的!(也不排除只是现在服务器压力小哈),试用几天再继续报告。[......]
异步回收fork出的子进程(僵尸进程)
fork()之后,子进程和父进程分叉执行,僵尸进程的产生是因为父进程没有给子进程“收尸”造成的,又可以根据危害程度分为下述两类:
总体来说:当子进程结束之后,但父进程未结束之前,子进程将成为僵尸进程。
(1)当子进程结束之后,但父进程未结束之前,子进程将成为僵尸进程,父进程结束后僵尸被init进程回收。
(2)如果子进程结束了,但是父进程始终没有结束,那么这个僵尸将一直存在,而且随着exec,僵尸越来越多。
传统的方法是在parent中使用wait()等待子进程直到回收,但是这样就会一直阻塞,父进程什么都作不了了!
有没有别的方法呢?有!那就是使用waitpid()+Signal的方法实现异步干掉僵尸进程。
原理:
(1)子进程退出的时候,会发送一个信号:SIGCHLD
(2)使用signal()可以指定程序处理某个信号量的对应handle函数
内附源代码。[......]
(转)测试Lighttpd accept的惊群现象
关于“惊群现象”:在阻塞模型中,各进程分别通过accept阻塞,等待连接到达,当一个连接到达时,所有的进程都会被唤醒,但只有其中一个进程可以成功accept该连接,其余的则继续投入睡眠,这就是所谓的惊群现象,转载的这篇文章很好的对Lighttpd进行了测试,并分析了惊群现象。模拟实现了epoll+prefox()模型。[......]
(转)一个非常好的epoll+线程池服务器Demo
转载自:http://zhangyafeikimi.javaeye.com/blog/285193
[cpp]
/**
张亚霏修改
文件名:epoll_demo.c
编译: gcc epoll_demo.c -pthread
程序源码如下(请自行编辑宏定义SERVER_IP为自己的IP):
*/
/*Linux 2.6 x86_64 only*/
#include <stdio.h>
#include <stdlib.h>
#include <strin[......]