在Tomcat服务器的机器上,操作系统是 Linux RHEL 5.3,在dmesg的输出中发现很多类似的报错信息:
Out of socket memory
printk: 8 messages suppressed.
从网上搜了一下,发现两篇不错的解释这个错误的文章,综合一下摘录下来。
http://jaseywang.me/2012/05/09/%E5%85%B3%E4%BA%8E-out-of-socket-memory-%E7%9A%84%E8%A7%A3%E9%87%8A-2/
http://blog.tsunanet.net/2011/03/out-of-socket-memory.html
第二篇文章里那个博主开头有段说说的挺好:
“在我们开始之前,让我告诉你,在你自己没做任何作业的时候,你不应该相信任何博客或者论坛里给的建议,尤其是那些家伙建议你修改所有tcp相关的内核参数时。他们自己并不知道自己在干什么,而且大多数时候他们可能也并太懂TCP/IP。”
让我们开始吧。(提前说一下,我也还没对这些做过实验哪,仅供参考 )
出现"Out of socket memory"消息的两种情况:
1.有很多的孤儿套接字(orphan sockets)
2.tcp socket 用尽了给他分配的内存
首先看看情况 2。对于 TCP socket 来说,使用 pages 来计数的,而非 bytes,一般情况下 1 page = 4096 bytes。page 大小可以通过下面命令获得:
$ getconf PAGESIZE