我不是一个Linux专家,所以我问你的意见。 这是我电脑上的free -m命令的输出:
total used free shared buffers cached Mem: 2026 1643 383 0 313 926 -/+ buffers/cache: 402 1624 Swap: 2855 0 2855
内存使用是否正常? (apache和mysql运行,当时没有用户login)
对我看起来很好。 我会阅读如何读取一个Linux的内存使用情况,因为你需要查看缓冲区/caching以获得更好的想法。
你做得很好。 好消息是没有使用Swap。
Linux使用的内存有点不同于你所期望的。 为什么? 它实际上使用尽可能多的内存,因为它可能可以:)
任何进程的最慢点,在任何操作系统正在等待I / O ..它不仅缓慢,有时危险。 想象一下,在I / O绑定调用中等待的进程永远不会返回。如果进程死亡会发生什么? 这就是为什么我们有磁盘睡眠,以防止从内部腐烂。
剩下的就是服务器或桌面的响应能力,最好的折衷办法就是将经常访问的文件放在内存中,这样进程就不会成为I / O限制。 实际上,您可以调整Linux使用cachingvs swap的方式,但是将文件保留在干净的页面中的次数却是8/10,这使得运行速度更快。
当进程跳到磁盘的内存(交换)..这是一个坏的迹象。 这种情况经常发生在分配比实际需要的内存(每个线程或分支)更多的内存来处理未知大小的传入请求时。 例如,在同一台计算机上运行Apache + MySQL时会发生这种情况。 其他进程不能从内核获得连续的内存块,因为两个胖子站在门口的中间。 当一个进程必须读取一个块设备来访问内存时,一切都会变得缓慢,尤其是那些干净的分配块等待将东西写入磁盘的进程。
一些程序员使用mlock()甚至mlockall()来防止这种情况,但通常内核知道的更好。 同样,有些人使用open()的O_DIRECT来绕过缓冲。除非你正在编写一个关系数据库引擎,否则内核通常比你知道什么需要缓冲区。 实际上,posix_fadvise()和posix_madvise()更好,因为它们向内核提供了你认为的内容,而不是指令。 毕竟,你的过程不是在任何给定的计算机上运行的唯一的东西:)
可能比你想要的更多的信息。 我的意思是说,这个用法看起来很正常。 但是,查看/ proc / sys / vm旋钮来控制这种行为,如果你想修补:)
你根本没有交换,而你正在使用的绝大部分内存是caching/caching。 看起来很健康。 这里有一篇关于如何理解“free”命令的好文章。
由一些Linux工具定义的术语“内存使用”与大多数人所期望的有些不同。
通常,当人们考虑内存使用时,会考虑应用程序在内存中占用的空间。
一些(大多数?)Linux工具增加了磁盘caching。 所以当然总量要高一些 此外,Linux将倾向于填充内存,否则与caching和这样的事情不使用。 所以,根据这个定义,一个Linux机器上的“内存使用量”总是会在一段时间后增长到99%左右。
您可以尝试使用htop。 它给你一个颜色编码的内存使用情况的条形图:绿色的“旧学校”使用的内存(进程),蓝色的缓冲区,橙色的caching。
不要惊慌!
你的公羊很好!