Ubuntu 不使用非活动内存并进行交换。为什么?
Ubuntu doesn't use inactive memory and does swapping. Why?
我有什么:
1. Ubuntu 16.4 (VPS)。
2. 空闲内存:
免费-m
total used free shared buff/cache available
Mem: 2048 916 0 251 1131 930
Swap: 512 183 328
零,但可用 930。那是什么?
让我们检查内存信息。
猫/proc/meminfo
MemTotal: 2097152 kB
MemFree: 0 kB
Cached: 1092204 kB
Buffers: 0 kB
Active: 926032 kB
Inactive: 1003456 kB
Active(anon): 358948 kB
Inactive(anon): 478336 kB
Active(file): 567084 kB
Inactive(file): 525120 kB
Unevictable: 4440 kB
Mlocked: 16716 kB
SwapTotal: 524288 kB
SwapFree: 337304 kB
Dirty: 3664 kB
Writeback: 0 kB
AnonPages: 837284 kB
Shmem: 257492 kB
Slab: 69176 kB
SReclaimable: 51680 kB
SUnreclaim: 17496 kB
我们可以在这里查看非活动内存。这就对了。 Ubuntu 使用 PageCache 机制将磁盘中的页面存储在内存中。它从磁盘加载数据,将其保存在内存中,需要时只需从内存中提供。活跃意味着频繁,不活跃意味着一旦加载并且可以在需要时释放并用于其他原因。在释放之前,如果它有变化,那么这个变化应该存储在磁盘中。听起来不错,应该很快!
- 这段内存中有什么数据?
我有一个包含大量图片的网站,搜索机器人总是在搜索内容并打开大量页面。所以,我假设这主要是缓存在内存中的图像。让我们用 vmtouch 检查一下:
vmtouch 上传/
Files: 947554
Directories: 452
Resident Pages: 336841/7859937 1G/29G 4.29%
Elapsed: 15.938 seconds
看起来有 1 GB 缓存!行。一切看起来都计算正确。当然不仅仅是图片,图片可以占用这1GB的磁盘空间space.
问题:
我已经安装了监控collectd。当我打开交换信息时,我看到了奇怪的东西。
collectd
蓝线表示换出。换出是指系统获取页面并将其存储在磁盘上,然后将释放的内存用于其他工作。但它应该使用非活动内存!它应该释放非活动内存而不是换出。
这条蓝线每 5 分钟一班。 sphinx 的 cron 时间是 运行。命令是:
索引器 --all --rotate
它为3个索引做索引。每个使用 MySQL 运行查询。表有大约 40.000 条记录要索引,所有这些记录都拆分为 3 个索引。
内存使用情况如下:
memory
有时系统会释放内存。它看起来像图像上的绿色三角形 space。它比使用 PageCache 时感觉更自由。
我将显示 ps 命令的内存使用情况(输出的一部分):
ps aux --sort -rss
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
mysql 25736 48.9 18.9 2587348 396632 ? Sl Aug01 2130:22 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
sphinxs+ 352 0.1 1.8 543592 39784 ? Sl May01 209:07 /usr/bin/searchd
www-data 11926 1.3 1.4 388392 29636 ? S 15:28 0:02 php /var/www/html/ma-ideals.com/index.php -p fb -t 10
www-data 11322 0.1 0.7 449716 16568 ? S 15:06 0:02 php-fpm: pool www
www-data 11761 0.2 0.7 449716 15812 ? S 15:21 0:01 php-fpm: pool www
www-data 11535 0.1 0.7 449716 15432 ? S 15:12 0:01 php-fpm: pool www
www-data 11338 0.1 0.7 449712 15320 ? S 15:07 0:02 php-fpm: pool www
www-data 11478 0.1 0.6 447664 14548 ? S 15:10 0:02 php-fpm: pool www
有人可以帮助我更深入地研究这个换出背后发生的事情以及为什么 ubuntu 没有在这个操作中使用非活动内存吗?
稍微换掉有什么问题?如果内核可以找到真正的冷页,为什么要让它们浪费内存?
似乎有很多关于交换的迷信——人们虔诚地相信系统没有它会更好,等等。事实是交换只是优化你的内存使用。交换对于系统来说 很好 ,因为它使物理内存可用于更重要的用途。 OTOH,如果您看到重要的 swapIN,那么您可能会遇到问题(但这并不是交换或经历适度交换所固有的。)
我有什么: 1. Ubuntu 16.4 (VPS)。 2. 空闲内存:
免费-m
total used free shared buff/cache available
Mem: 2048 916 0 251 1131 930
Swap: 512 183 328
零,但可用 930。那是什么?
让我们检查内存信息。
猫/proc/meminfo
MemTotal: 2097152 kB
MemFree: 0 kB
Cached: 1092204 kB
Buffers: 0 kB
Active: 926032 kB
Inactive: 1003456 kB
Active(anon): 358948 kB
Inactive(anon): 478336 kB
Active(file): 567084 kB
Inactive(file): 525120 kB
Unevictable: 4440 kB
Mlocked: 16716 kB
SwapTotal: 524288 kB
SwapFree: 337304 kB
Dirty: 3664 kB
Writeback: 0 kB
AnonPages: 837284 kB
Shmem: 257492 kB
Slab: 69176 kB
SReclaimable: 51680 kB
SUnreclaim: 17496 kB
我们可以在这里查看非活动内存。这就对了。 Ubuntu 使用 PageCache 机制将磁盘中的页面存储在内存中。它从磁盘加载数据,将其保存在内存中,需要时只需从内存中提供。活跃意味着频繁,不活跃意味着一旦加载并且可以在需要时释放并用于其他原因。在释放之前,如果它有变化,那么这个变化应该存储在磁盘中。听起来不错,应该很快!
- 这段内存中有什么数据?
我有一个包含大量图片的网站,搜索机器人总是在搜索内容并打开大量页面。所以,我假设这主要是缓存在内存中的图像。让我们用 vmtouch 检查一下:
vmtouch 上传/
Files: 947554
Directories: 452
Resident Pages: 336841/7859937 1G/29G 4.29%
Elapsed: 15.938 seconds
看起来有 1 GB 缓存!行。一切看起来都计算正确。当然不仅仅是图片,图片可以占用这1GB的磁盘空间space.
问题: 我已经安装了监控collectd。当我打开交换信息时,我看到了奇怪的东西。
collectd
蓝线表示换出。换出是指系统获取页面并将其存储在磁盘上,然后将释放的内存用于其他工作。但它应该使用非活动内存!它应该释放非活动内存而不是换出。
这条蓝线每 5 分钟一班。 sphinx 的 cron 时间是 运行。命令是:
索引器 --all --rotate
它为3个索引做索引。每个使用 MySQL 运行查询。表有大约 40.000 条记录要索引,所有这些记录都拆分为 3 个索引。
内存使用情况如下:
memory
有时系统会释放内存。它看起来像图像上的绿色三角形 space。它比使用 PageCache 时感觉更自由。
我将显示 ps 命令的内存使用情况(输出的一部分):
ps aux --sort -rss
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
mysql 25736 48.9 18.9 2587348 396632 ? Sl Aug01 2130:22 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
sphinxs+ 352 0.1 1.8 543592 39784 ? Sl May01 209:07 /usr/bin/searchd
www-data 11926 1.3 1.4 388392 29636 ? S 15:28 0:02 php /var/www/html/ma-ideals.com/index.php -p fb -t 10
www-data 11322 0.1 0.7 449716 16568 ? S 15:06 0:02 php-fpm: pool www
www-data 11761 0.2 0.7 449716 15812 ? S 15:21 0:01 php-fpm: pool www
www-data 11535 0.1 0.7 449716 15432 ? S 15:12 0:01 php-fpm: pool www
www-data 11338 0.1 0.7 449712 15320 ? S 15:07 0:02 php-fpm: pool www
www-data 11478 0.1 0.6 447664 14548 ? S 15:10 0:02 php-fpm: pool www
有人可以帮助我更深入地研究这个换出背后发生的事情以及为什么 ubuntu 没有在这个操作中使用非活动内存吗?
稍微换掉有什么问题?如果内核可以找到真正的冷页,为什么要让它们浪费内存?
似乎有很多关于交换的迷信——人们虔诚地相信系统没有它会更好,等等。事实是交换只是优化你的内存使用。交换对于系统来说 很好 ,因为它使物理内存可用于更重要的用途。 OTOH,如果您看到重要的 swapIN,那么您可能会遇到问题(但这并不是交换或经历适度交换所固有的。)