我试图build立一个进程意外停止的原因,一种可能是服务器内存不足,但我不确定是否理解了内存和Linux。
从free命令(从我试图解决的问题从同一台机器采取以下输出):
total used free shared buffers cached Mem: 991 827 163 0 107 361 -/+ buffers/cache: 358 633 Swap: 0 0 0
最上面的一行表明,这台机器确实使用了大量的内存(只有163 Mb免费),所以如果更多的进程启动(他们这样做),那么我们可能会有内存不足的情况下,各种进程被杀害。
然而,我一直都认为,由于Linux在内存中大量使用缓冲区和caching,可以根据需要使用,所以我应该关注的数字是第二行,这表明〜633 Mb是免费的,在这种情况下,我认为这台机器不太可能会耗尽内存。
那么你能否澄清一下我对Linux和内存的理解,并且帮助我理解Linux何时实际运行内存不足?
PS – 这台机器是一个单一目的的机器 – 它运行一个大型networking应用程序的后台进程,这就是它所做的一切。 没有Web服务器,没有数据库,只有一个巨大的Ruby on Rails应用程序作为后台进程运行。 偶尔的cron作业会启动特定的应用程序任务,这些任务会临时在内存中创build另一个rails应用程序实例。
内核使用的ram不是用来caching从存储中读取的数据 – 这被称为缓冲区caching。 由于缓冲区caching只是硬盘上内容的拷贝,如果内核需要内存来处理更重要的内容,那么它可以“忘记”内存中的数据副本,并将其用于其他内容。 如果它需要这些数据,它只能从驱动器重新读取它。
请记住有缓冲区caching,然后有常规的内核缓冲区(对于TCP套接字,路由表等)
所以,第一行的免费命令就是向你展示:总计:你得到了多lessram,期间。 使用:它有多less实际上有什么有价值的东西。 免费:绝对没用 – 不一定是空的,但不pipe有没有垃圾。 共享:进程之间共享的东西 – 主要是共享库。 缓冲区:常规的内核缓冲区。 caching:表面上,缓冲区caching。
现在,第二行显示了什么是“真正使用”。 如在公羊中,不能被遗忘的没有后果的是什么。 而第二行的“空闲”字段是未使用的RAM和缓冲区caching的总和。
最后一行将包括交换空间 – 内核可以在内存中写入重要信息的存储空间,以便它可以使用该内存位置来存储其他内容。 但是,通过你的截图,你没有任何configuration。
现在,看起来你正在使用一个固定的大约360MB的1GB。 如果您担心或怀疑内存不足,请检查内核日志消息。 当内核达到绝对不能满足需求的情况时,内核将进行日志logging。 它会援引失忆的杀手,希望通过杀死一个进程来挽救这个局面。
我最初以为这是一个VPS。 如果它是一个物理服务器,并且没有额外的RAM,则可以添加它,然后考虑添加交换空间!
否则,检查/ var / log日志消息或在命令行,只需使用dmesg检查最新的内核消息。