Linux:内存可用,但使用交换。为什么?


11

这是穆宁的图表。

内存使用情况:http : //koryagin.com/w/q/memory-day.png

换入/ 出:http : //koryagin.com/w/q/swap-day.png

当RAM的大小比程序使用的内存大得多时,为什么Linux会决定增加缓存并使用swap?


2
过去几年中,Linux VM子系统已进行了很大的调整,以偏爱缓冲区空间和缓存空间。占用内存但不执行任何操作的应用程序将被拖到磁盘上。这样可以提高响应速度和性能。除非您遇到性能问题,否则您实际上不必担心。
巴特·

Answers:


17

您的服务器可能有一些内存消耗和/或不活动的进程,其中有许多不活动的页面。Linux内核更喜欢交换程序的非活动部分以进行交换,因为很有可能将内存更好地用作高速缓存。

如果您希望更改此行为,请使用vm.swappinesssysctl可调参数,但要注意,超越内核开发人员/发行版维护人员的智慧并非易事。:-)

在交换高峰期间,您的服务器是否出现性能问题?还是出于好奇?


我在这台特定的服务器上没有性能问题。但是在另一种情况还不太清楚的地方,我正在考虑该怎么做。如果某些Linux内存管理逻辑与任何已知的PHP问题都不匹配,那么难道不是Linux-FPM段错误的原因吗?因此,一般都出于好奇。
Pavel Koryagin'9

顺便说一句,该服务器使用一组固定的脚本集中处理很少的数据,因此它不应具有密集的I / O。那么,Linux为什么要拥有如此大的缓存?
Pavel Koryagin

Linux大量缓存文件,文件元数据,目录条目等。尝试命令slabtop
Janne Pikkarainen

非常感谢。需要一段时间来了解如何处理slabtop信息。
Pavel Koryagin

当老板走过小隔间并使自己成为他/她的眼睛的专家时,请让其全屏显示。:-) systat -vmstatFreeBSD中还有另一个不错的“哦,那看起来很难理解”命令(可能也是其他BSD)。
Janne Pikkarainen

1

您应该尝试使用swappiness参数。如您所见,当系统尝试增加文件缓存大小时,系统开始交换,如果swappines不为0,这是正常的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.