Step1:背景介绍
今天在进行epoll性能测试时,测试模式为C/S模式,
Server:为接收端,每接收一个connSock连接,就fork一个child-process处理这个连接上的数据接收
Client:为发送端,内部建立多个连接到Server的socket-fd,然后注册到epoll,通过epoll多路复用机制实现每个连接的发送
测试时Server会一直运行
Client测试一次Ctrl+C干掉一次
Step2:操作介绍
1)Client每运行一次会建立128个套接字连接
2)Client每运行一次,Server内部就会建立128个child进程。Ctrl+C干掉Client后对应的128个child进程还会在Server内(设计的缺陷。。。,后面发现了此问题后进行了修改完善。。。。因为此缺陷导致最后Client运行时根本启动不起来,才发现是最多文件描述符总数被Server用完了,导致Client运行时建立连接没法建立起来导致Client运行不起来)
3)经过Client的多次运行和杀掉后,Server端建立了最大数量的进程
Step3:问题定位
发现此问题后(怀疑是文件描述符被占用完了),马上通过top看自己启动了多少进程:
$top -u li_xiaoming
发现很多很多进程名为"Server"的进程。
Step4