下面是自己遇到问题时的解决过程:
编写的服务器程序出现提示解析文件失败,使用xml解析库为tinyxml,通过定位发现时loadfile函数问题,开始怀疑是文件被占用,因为此问题是过一段时间产生的,所以分析可能是文件描述符问题。
1.查看进程的文件描述符
ps -ef|grep abc得到abc进程ID,然后进入/proc/进程id/fd 查看文件描述符,发现占用超过系统上限。
ulimit -a可以看到配置的上线open files,用ulimit -n可以设置。
2.使用lsof工具查看具体的描述符占用
lsof -n
3.使用strace工具定位系统调用
使用strace 跟踪系统调用,观察发现未关闭描述符处。
多线程需要使用strace -f -p 进程ID