有关 Linux 内存使用的建议

有关 Linux 内存使用的建议

我不是 Linux 专家,所以我想征求您的意见。这是我的计算机上 free -m 命令的输出:

             total       used       free     shared    buffers     cached
Mem:          2026       1643        383          0        313        926
-/+ buffers/cache:        402       1624
Swap:         2855          0       2855

RAM 使用率正常吗?(apache 和 mysql 正在运行,当时没有用户登录)

答案1

我觉得这很好。我会阅读有关如何读取 Linux 机器的内存使用情况的文章,因为您还需要查看缓冲区/缓存才能获得更好的想法。

您做得非常好。值得庆幸的是,没有使用 Swap。

答案2

Linux 使用内存的方式可能和你想象的有些不同。为什么?它实际上用途尽可能多的内存:)

任何操作系统中,任何进程最慢的一点就是等待 I/O。它不仅慢,有时还非常危险。想象一下,一个进程在等待永远不会返回的 I/O 绑定调用。如果该进程死亡,会发生什么?这就是为什么我们有磁盘睡眠以防止仁从内部腐烂。

剩下的就是响应能力,无论是服务器还是桌面,最好的折衷方案是将经常访问的文件放在内存中,这样进程就不会受到 I/O 限制。这完全不公平,事实上你可以调整 Linux 使用缓存和交换的方式,但 8/10 次将文件保存在干净的页面中会使运行速度更快。

当进程需要内存(交换)时,就需要磁盘……这是一个不好的迹象。当你将分配的内存远远超过实际需要(每个线程或分支)的东西组合在一起来处理未知大小的传入请求时,这种情况经常发生。例如,在同一台计算机上运行 Apache + MySQL 时就会发生这种情况。由于门口中间站着两个胖子,其他进程无法从内核获取连续的内存块。当进程必须读取块设备才能访问内存时,一切都会变慢,尤其是那些拥有干净的分配块等待将内容写入磁盘的进程。

一些程序员使用 mlock() 甚至 mlockall() 来防止这种情况,但通常内核更清楚。同样,有些人使用 O_DIRECT 和 open() 来绕过缓冲……除非您正在编写关系数据库引擎,否则内核通常比您更清楚哪些需要缓冲,哪些不需要缓冲。实际上,posix_fadvise() 和 posix_madvise() 更好,因为它们建议将您认为您知道的内容传递给内核,而不是发号施令。毕竟,您的进程并不是任何给定计算机上唯一运行的东西 :)

可能比您想要的信息多得多。我的意思是,使用情况看起来绝对正常。但是,如果您想进行修改,请查看 /proc/sys/vm 以找到控制此行为的旋钮 :)

答案3

你根本没有交换,你使用的绝大部分 RAM 都是缓冲区/缓存。看起来相当健康。有一篇关于如何理解“free”命令的好文章这里

答案4

不要惊慌!
你的公羊没事!

http://www.linuxatemyram.com/

相关内容