介绍
提高服务器响应速度和防止应用程序内存不足错误的最简单方法之一是添加一些交换空间。 Swap 是硬盘上的一个区域,它被指定为操作系统可以临时存储数据的地方,这些数据不能再保存在 RAM 中。
写入磁盘的信息将比保存在 RAM 中的信息慢,但操作系统更愿意将应用程序数据保存在内存中,并使用 Swap 交换旧数据。总的来说,当系统的 RAM 耗尽时,将 Swap 作为数据存储空间是一个很好的选择。
在本指南中,我们将介绍如何在 CentOS 7 服务器上创建和启用交换文件。
检查系统的交换信息
在我们开始之前,我们将看看我们的操作系统,看看我们是否已经有一些可用的交换空间。我们可以有多个交换文件或交换分区,但通常一个就足够了。
我们可以通过键入以下命令来查看系统是否有任何配置交换:
sudo swapon -s# 如果返回空,表示目前没有启用任何 Swap。# 另一个检查 Swap 的方法是使用 free 命令,它显示了系统内存使用的情况free -mtotal used free shared buff/cache availableMem: 472 111 36 4 324 308Swap: 0 0 0
检查硬盘上可用空间
为 swap 分配空间的典型方式是使用专门用于该任务的单独分区。但是,改变分区方案并不总是可能的。我们可以轻松地创建驻留在现有分区上的交换文件。
在我们这样做之前,我们应该知道我们当前的磁盘使用情况。我们可以通过输入以下内容来获得这些信息:
df -h# 查看磁盘使用信息文件系统 容量 已用 可用 已用% 挂载点/dev/mapper/cl-root 17G 5.0G 13G 30% /devtmpfs 226M 0 226M 0% /devtmpfs 237M 0 237M 0% /dev/shmtmpfs 237M 4.6M 232M 2% /runtmpfs 237M 0 237M 0% /sys/fs/cgroup/dev/sda1 1014M 139M 876M 14% /boottmpfs 48M 0 48M 0% /run/user/0
尽管对于交换空间的适当大小有很多意见,但这取决于你的个人偏好和应用程序要求。一般来说,等于或者是系统内存量的两倍是一个很好的起点。
由于我的老古董机器只具有 512M 的 RAM,并且加倍会占用我不太愿意被占用的大量磁盘空间,所以我将创建 1GB 的交换空间以匹配我系统的 RAM。
创建一个交换文件
我们将通过使用该 dd 命令来创建具有预分配空间的文件。这个多功能的磁盘工具从一个位置写入另一个位置。 我们可以使用它在 Linux 系统中的特殊设备上将文件零写入文件,该系统 /dev/zero 只需要根据请求分配尽可能多的零。 我们使用 bs 块大小和 count 块数的组合来指定文件大小。我们分配给每个参数几乎完全是任意的。重要的是它们相乘的结果。
dd if=/dev/zero of=/swapfile bs=1M count=1024
启用交换文件
目前,我们的文件已创建,但我们的系统不知道这应该用于交换。我们需要告诉我们的系统将该文件格式化为交换,然后启用它。
在我们这样做之前,我们需要调整我们文件的权限,以便除 root 之外的任何人都无法读取它。允许其他用户读取或写入此文件将是一个巨大的安全风险。我们可以通过输入以下内容来锁定权限:
chmod 600 /swapfile# 我们可以通过键入以下命令来告诉我们的系统设置交换空间mkswap /swapfile# 输入以下命令来启用它swapon /swapfile# 检查我们的系统现在是否报告交换空间来验证过程是否成功:swapon -s# 证实我们的发现:free -m
永久使用交换文件
vi /etc/fstab# 在文件底部增加一行配置/swapfile none swap sw 0 0
调整配置
该 swappiness 参数配置系统将数据从 RAM 交换到交换空间的频率。这是介于 0 和 100 之间的值,表示百分比。
如果值接近零,内核将不会将数据交换到磁盘,除非绝对必要。请记住,与交换文件的交互是“昂贵的”,因为它们比与 RAM 的交互花费更多时间,并且可能导致性能的显着降低。告诉系统不要太依赖交换通常会使系统更快。
接近 100 的值将尝试将更多的数据放入交换中以努力保持更多的 RAM 空间。根据你的应用程序的内存配置文件或你使用的服务器,在某些情况下可能会更好。
你可能想要修改的另一个相关值是 vfs_cache_pressure 。此设置配置系统将选择多少数据缓存 inode 和 dentry 信息。
基本上,这是访问有关文件系统的数据。这通常是非常昂贵的查找和频繁请求,所以对于你的系统来说缓存是一件很棒的事情
# 通过输入以下内容我们可以看到当前的 swappiness 值:cat /proc/sys/vm/swappiness# 输出 60sysctl vm.swappiness=10# 通过 proc 再次查询文件系统来查看当前值:cat /proc/sys/vm/vfs_cache_pressure# 目前配置的那样,系统太快地从缓存中删除索引节点信息。通过输入以下内容,可以将其设置为更保守的设置,如 50sysctl vm.vfs_cache_pressure=50# 永久生效vi /etc/sysctl.conf# 底部添加vm.swappiness=10vm.vfs_cache_pressure = 50
