我正在处理的旧代码反复调用sctp_sendmsg()。在运行代码的前几个小时,调用总是成功的(返回大于0的整数)。但是,此后,对该API的重复调用会永久返回-1,并将errno设置为11(“资源暂时不可用”)。
在永久性失败时,运行代码的进程在top中显示较低的CPU和内存使用率:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6059 root 20 0 143344 131352 9912 S 10.8 0.1 13:00.85 some_program
但是,当我检查SCTP assocs统计信息时,我注意到传输队列的大小很大:
cat /proc/`ps -ef | egrep some_program | head -n 1 | awk '{print $2}'`/net/sctp/assocs
巨大的传输队列大小是一个问题吗?如果是这样,可能是什么原因造成的?如何进一步诊断问题以找到根本原因和解决方案?