linux – 即使没有完全使用交换,当内存不足时我也无法进入远程服务器

前端之家收集整理的这篇文章主要介绍了linux – 即使没有完全使用交换,当内存不足时我也无法进入远程服务器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个godaddy服务器定期没有响应.很难排除故障,因为当它变得无法响应时我无法进入故障排除状态.我通过添加一个cron作业来解决发生了什么,该作业每5分钟将“top”的输出传输到日志文件.下次我在它没有响应之后重新启动它我检查了那些日志并发现ram被最大化了,但交换大多未使用.

我正在努力减少该机器上的两个应用程序服务器的ram使用情况(事实证明,有太多的连接被打开了.每个人用完了30米,所以在打开40之后服务器用完了ram),但是我我真的很想知道如何确保我能够进入机器.

如果交换文件未满,那么我认为服务器有足够的空间来响应,即使它的速度很慢.有什么方法可以保留一点内存,以便我可以随时进入机器吗?

以下是服务器正常运行时的示例:

top - 15:13:21 up  3:12,2 users,load average: 0.15,0.30,0.33
Tasks: 127 total,1 running,126 sleeping,0 stopped,0 zombie
cpu(s):  2.4%us,1.8%sy,0.0%ni,95.7%id,0.0%wa,0.0%hi,0.2%si,0.0%st
Mem:   2064980k total,1611252k used,453728k free,45852k buffers
Swap:  2096472k total,0k used,2096472k free,790212k cached

这是在服务器停止运行之前记录的最后一个顶级日志:

top - 14:45:08 up 15:20,0 users,load average: 0.27,0.16,0.10
Tasks: 141 total,2 running,139 sleeping,0 zombie
cpu(s):  2.7%us,1.9%sy,95.3%id,0.0%si,2007652k used,57328k free,60496k buffers
Swap:  2096472k total,100k used,2096372k free,689584k cached

请注意,当服务器用完ram时,记录“top”输出的cron作业也会停止运行,因此整个服务器显然会停止运行.

解决方法

我之前遇到过类似的问题,他们可能会成为一个令人讨厌的问题.由于您提供了大量信息,我必须详细说明要检查的内容以及我的问题.

首先,检查您的日志.最值得注意的是在这种情况下dmesg的输出(这是内核环缓冲区,它转储日志数据).这会定期刷新到/ var / log中的文件,但这完全取决于您的操作系统.例如,Red Hat有一个/ var / log / dmesg文件.您正在寻找与the OOM killer工艺特别相关的任何不寻常的东西.当RAM开始变满并尝试保持服务器启动和响应时,这将结束程序. sshd应该免除这个,但这是关于如何设置的特定发行版.指定OOM豁免的现代形式是给sshd一个分数,告诉内核它对整个服务器有多珍贵(如果发生关键的RAM情况,它应该把它放在要杀死的进程列表中).你的发行版应该正确设置它.

要检查的另一件事是您的服务器具有足够的熵,具有以下内容

cat /proc/sys/kernel/random/entropy_avail

OK值大约在1000-1500之间.下面和你的跑步低.它在我的机器上只能达到大约4000-5000(这些都是基于我对服务器的观察).

我有登录服务器的问题,其中熵太低(并且生成很慢),应用程序会等待更多的熵可用.有一个臭名昭着的Debian Exim bug突出了这一点. Exim在Debian上使用GNU TLS,它只使用/ dev / random并为每个连接使用大量的熵.见here.当熵耗尽时,Exim就会挂起.它还会导致其他依赖熵的程序也开始拒绝连接.

由于会话密钥是在每个会话中生成的,因此sshd需要一个很好的随机数源.虽然如果/ dev / random阻塞,它应该使用/ dev / urandom来收集伪随机数,但我不确定sshd是否会这样做.

此问题在虚拟系统上可能非常严重,因为许多随机数源未传递到虚拟机.熵的主要来源是磁盘I / O,但这通常不会传递到VM.可能嵌入在物理机的芯片组/ cpu中的硬件随机生成器也不太可能被传递到虚拟机.

This是一个很好的写在这件事上.

我在我的服务器后台运行rngd,用/ dev / urandom中的数据提供/ dev / random:

rngd -r /dev/urandom -o /dev/random

这不是一个很好的解决方案,但是当你寻找更好的随机数源时,它是一个有用的黑客.我正在考虑用来自不同来源的数据提供rngd,但还没有太多机会这样做.

猜你在找的Linux相关文章