admin管理员组

文章数量:1642147

在使用socket时,发现在压力测试一阵子后,在accept函数中会报Too many open files errno :24错误

        if ((connfd = accept(listenfd, NULL, NULL)) == -1) {
            printf("accpet socket error: %s errno :%d", strerror(errno), errno);
            continue;
        }

通过压力测试此程序,发现此进程很快就达到了最大进程的上限fd限制1024

lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|more
   1023 /usr/sbin/initdaemon
     45 /bin/busybox

查看code时发现确实是connfd没有及时关闭导致,添加close就可以解决此问题。

close(connfd);

通过指令查看进程的fd,发现一直稳定在118数量,应该是没有问题了。

# lsof -p 6137 |wc -l
lsof -p 6137 |wc -l
118
# lsof -p 6137 |wc -l
lsof -p 6137 |wc -l
118
# lsof -p 6137 |wc -l
lsof -p 6137 |wc -l
118
# lsof -p 6137 |wc -l
lsof -p 6137 |wc -l
118
# lsof -p 6137 |wc -l
lsof -p 6137 |wc -l
118

本文标签: 解决方法错误操作SocketFiles