客户反馈系统无法登录,但已有的登录窗口可以执行命令,但部分网络相关命令执行提示错误,如下:
#no -a
0821-055 no: Cannot create a socket. The error number is 74.
UNIX环境的错误码定义在errno.h头文件中,74号错误代表为No buffer space available, 也就是缓存资源不足:
# grep 74 /usr/include/sys/errno.h
#define ENOBUFS 74 /* No buffer space available */
通过topas/nmon检查内存使用,发现计算内存占用仅略超过50%,并未发现系统物理内存资源不足的现象。根据实际报错,需要进一步排查网络内存使用情况。
在AIX环境下,套接字(socket) 网络内存使用主要由如下参数限定:
因此,当网络内存分配总量达到系统总内存的42.5%(=thewall*sockthresh/100)时,在系统中新建socket会失败,错误为ENOBUFS。新的连接请求将被静默丢弃,而已有的套接字可以继续使用额外的内存。
结合系统实际表现,新建连接失败,现有窗口可以继续访问,但部分网络类操作失败,初步判定系统中存在网络内存占用过高的问题。通过kdb系列内部命令可以进一步证实该问题。
普通用户可以通过nmon然后输入m,观察到系统内核内存分配占比,即下图右上角System部分(45.9%):
作为对比,该系统重启后,System占比仅为12.5%.
说明:
网络内存仅为系统内核内存的一部分,除网络缓存外,系统内存还包含虚拟内存管理、文件系统、逻辑卷管理、设备驱动等等。
网络内存使用高可能与系统中连接数过多有关,因为每个连接的收发缓存、控制块等都需要分配内存,系统网络协议栈处理也需要一定内存;比如将TCP收发缓存分别设置为1M,则一万个连接大约需要20GB网络内存。
网络内存使用高也可能与系统存在网络内存泄漏有关;这类问题通常需要联系厂商服务人员解决,必须时需要提供system dump等数据。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞1
添加新评论0 条评论