在完成处理后,创build大文件会占用内存

我正在使用Ubuntu 14.04LTS服务器(AWS EC2)来执行自定义数据库转储,但是我收到了非常奇怪的内存行为。

我使用PHP CLI脚本来循环输出到一个编号文件的自定义转储查询,然后将该文件转换为输出文件。 内存使用情况正如预期的那样攀升,因为mysql。 mysql转储文件和输出文件都被写入一个单独的挂载驱动器(EBS)。

在启动脚本之前,内存使用量约为20%。 一旦这个过程完成,基于htop图表,内存使用率大约是90%。 我已经通过free -mvalidation了使用情况。 重新启动mysql会将内存使用率降低到大约50%。

我用lsof来validation没有使用该文件。 我甚至在目录上做了lsof ,只让我的bash进程和lsof。

真的很奇怪的部分是,只要我删除文件的内存使用率回落到20%。

我已经尝试删除该文件,而不重新启动mysql和使用下降30%的数字以上所期望的。

使用这里find的内存查看器脚本不会显示相同的内存使用情况,所以我认为它不完全准确。 它通过保留文件显示没有内存消耗。

有什么其他的方式可以告诉我什么是记忆?

你实际看到的是系统的磁盘caching使用情况。 所有现代系统都会caching磁盘操作,以便更快地对同一磁盘区域进行反复访问。

这个caching过程被认为是很less的资源,以后可能会产生的频繁的好处。 由于系统知道caching与任何其他内存要求相比并不重要,因此如果其他内容需要,它会立即转储部分内存。

你也注意到MySQL服务器进程的内部caching,它的作用类似于操作系统的caching,但操作系统并不认为这是caching,这就是为什么它只能通过服务器进程本身的操作释放,比如重启它。