引子

最近服务器内存老是爆掉,64G的内存对于四五个人同时使用还是有点勉强,上网查询了一下虚拟内存的教程,本博客记录一下方法。

swap内存设置

假设你想将swap文件放在/mnt/data/mem目录下,以下是详细的步骤:

创建并启用Swap文件

  1. 创建目录(如果目录不存在)

    sudo mkdir -p /mnt/data/mem
  2. 创建一个64GB的swap文件

    sudo fallocate -l 64G /mnt/data/mem/swapfile
    t=64
    64+0 records in
    64+0 records out
    68719476736 bytes (69 GB, 64 GiB) copied, 262.527 s, 262 MB/s

    如果fallocate命令不可用,可以使用dd命令:

    sudo dd if=/dev/zero of=/mnt/data/mem/swapfile bs=1G count=64
  3. 设置正确的权限

    sudo chmod 600 /mnt/data/mem/swapfile
    Setting up swapspace version 1, size = 64 GiB (68719472640 bytes)
    no label, UUID=c3dec71e-d8ef-4aa7-9501-7694112fc4c4
  4. 将文件格式化为swap空间

    sudo mkswap /mnt/data/mem/swapfile
  5. 启用swap文件

    sudo swapon /mnt/data/mem/swapfile
  6. 验证swap是否启用

    sudo swapon --show
    NAME                   TYPE SIZE USED PRIO
    /swapfile file 2G 2G -2
    /mnt/data/mem/swapfile file 64G 0B -3

    或者:

    free -h

持久化Swap文件

为了在系统重启后仍然保留这个swap文件,需要将其添加到/etc/fstab文件中:

  1. 备份/etc/fstab文件

    sudo cp /etc/fstab /etc/fstab.bak
  2. 编辑/etc/fstab文件

    sudo nano /etc/fstab
  3. 在文件末尾添加以下内容

    /mnt/data/mem/swapfile none swap sw 0 0
  4. 保存并退出编辑器

调整Swappiness值(可选)

Swappiness参数控制系统交换的频率,范围是0到100。值越高,系统越频繁地使用swap。默认值通常是60,可以根据需求调整:

  1. 检查当前swappiness值

    cat /proc/sys/vm/swappiness
  2. 设置新的swappiness值(例如,设置为10)

    sudo sysctl vm.swappiness=10
  3. 使该设置在重启后仍然有效

    sudo nano /etc/sysctl.conf

    在文件末尾添加:

    vm.swappiness=10
  4. 保存并退出编辑器

完成以上步骤后,你的Ubuntu系统应该已经成功配置了位于/mnt/data/mem目录下的64GB的虚拟内存。

swappiness推荐

在配置系统的swappiness参数时,主要取决于你对系统性能的需求以及具体的使用场景。Swappiness参数控制了Linux内核如何使用交换空间(swap)的频率。它的值范围是从0到100:

  • 值为0时,内核将尽量避免使用交换空间。
  • 值为100时,内核将非常频繁地使用交换空间。

推荐的Swappiness设置

对于你的系统配置(64GB物理内存和64GB交换空间),以下是一些推荐:

  1. 桌面系统或开发环境

    如果你主要用于桌面应用或开发环境,通常希望尽量减少交换空间的使用以保持系统响应速度。推荐将swappiness设置为较低的值,例如:

    sudo sysctl vm.swappiness=10
  2. 服务器或内存紧张的环境

    如果你的系统运行在服务器环境中,或者经常需要处理大量数据并且内存使用接近最大值,适当增加swappiness值可以帮助系统更好地管理内存。推荐值可以设置在30到60之间:

    sudo sysctl vm.swappiness=30
  3. 混合用途

    如果你的系统有多种用途(如同时运行桌面应用和服务器任务),可以选择一个中间值,例如:

    sudo sysctl vm.swappiness=20

调整和持久化Swappiness

  1. 临时调整swappiness

    sudo sysctl vm.swappiness=20
  2. 使swappiness值在重启后仍然有效

    编辑/etc/sysctl.conf文件:

    sudo nano /etc/sysctl.conf

    在文件末尾添加:

    vm.swappiness=20
  3. 保存并退出编辑器

验证Swappiness

你可以通过以下命令验证当前的swappiness值:

cat /proc/sys/vm/swappiness

监控和调整

请注意,最佳的swappiness设置可能需要一些实验和监控。你可以在实际使用中观察系统的性能和内存使用情况,并根据需要进行调整。

总结:

  • 桌面系统或开发环境:推荐swappiness=10
  • 服务器或内存紧张的环境:推荐swappiness=3060
  • 混合用途:推荐swappiness=20

通过以上方法,你可以找到一个平衡点,使你的系统在性能和内存管理之间达到最佳状态。

虚拟内存移回物理内存

要将虚拟内存(swap)中的内容移回到物理内存中,你可以通过以下步骤来实现。这通常涉及到禁用并重新启用交换空间,这样系统会将交换空间中的内容移回到物理内存中。

步骤:

  1. 降低swappiness(可选但推荐):

    这可以减少系统将内存页面移到交换空间的频率。

    sudo sysctl vm.swappiness=10
  2. 禁用交换空间

    禁用交换空间会强制系统将交换空间中的内容移回到物理内存中。

    sudo swapoff -a
  3. 重新启用交换空间

    重新启用交换空间,以便在需要时系统可以再次使用它。

    sudo swapon -a
  4. 验证交换空间是否已清空

    你可以使用以下命令查看交换空间的使用情况。

    free -h

    或者:

    swapon --show

示例命令

以下是上述步骤的完整命令集:

# 降低swappiness值
sudo sysctl vm.swappiness=10 # 禁用交换空间
sudo swapoff -a # 重新启用交换空间
sudo swapon -a # 验证交换空间是否已清空
free -h

持久化swappiness值(可选)

如果你希望永久降低swappiness值,可以编辑/etc/sysctl.conf文件:

sudo nano /etc/sysctl.conf

在文件末尾添加:

vm.swappiness=10

保存并退出编辑器。

注意事项

  • 确保你有足够的物理内存来容纳从交换空间中移回的内容。
  • 在执行这些操作之前,确保没有关键任务正在运行,因为禁用和重新启用交换空间可能会短暂影响系统性能。

通过以上步骤,你应该能够将虚拟内存中的内容移回到物理内存中,从而提高系统性能。

虚拟内存大小更改

如果你想将虚拟内存(swap)调整为16GB,可以通过以下步骤来实现。这包括删除现有的swap文件(如果存在),创建一个新的16GB的swap文件,并启用它。

步骤:

  1. 禁用当前的交换空间

    sudo swapoff -a
  2. 删除现有的swap文件(假设你的swap文件位于/mnt/data/mem/swapfile):

    sudo rm /mnt/data/mem/swapfile
  3. 创建一个新的16GB的swap文件

    sudo fallocate -l 16G /mnt/data/mem/swapfile

    如果fallocate命令不可用,可以使用dd命令:

    sudo dd if=/dev/zero of=/mnt/data/mem/swapfile bs=1G count=16
  4. 设置正确的权限

    sudo chmod 600 /mnt/data/mem/swapfile
  5. 将文件格式化为swap空间

    sudo mkswap /mnt/data/mem/swapfile
  6. 启用新的swap文件

    sudo swapon /mnt/data/mem/swapfile
  7. 验证新的swap是否启用

    sudo swapon --show

    或者:

    free -h

持久化新的Swap文件

为了在系统重启后仍然保留这个新的swap文件,需要确保它在/etc/fstab文件中正确配置:

  1. 编辑/etc/fstab文件

    sudo nano /etc/fstab
  2. 在文件中查找并删除旧的swap文件配置,并添加以下内容

    /mnt/data/mem/swapfile none swap sw 0 0
  3. 保存并退出编辑器

示例命令

以下是上述步骤的完整命令集:

# 禁用当前的交换空间
sudo swapoff -a # 删除现有的swap文件
sudo rm /mnt/data/mem/swapfile # 创建一个新的16GB的swap文件
sudo fallocate -l 16G /mnt/data/mem/swapfile # 设置正确的权限
sudo chmod 600 /mnt/data/mem/swapfile # 将文件格式化为swap空间
sudo mkswap /mnt/data/mem/swapfile # 启用新的swap文件
sudo swapon /mnt/data/mem/swapfile # 验证新的swap是否启用
sudo swapon --show
# 或者
free -h # 编辑/etc/fstab文件,持久化新的swap文件
sudo nano /etc/fstab
# 在文件中添加以下内容:
# /mnt/data/mem/swapfile none swap sw 0 0
# 保存并退出编辑器

通过以上步骤,你应该能够成功地将虚拟内存调整为16GB。

【服务器】Ubuntu虚拟内存设置的更多相关文章

  1. ubuntu下设置DNS服务器

    当网卡通过DHCP获取IP地址时,DHCP会根据DHCP服务器配置,自动给系统分配DNS服务器地址,此时执行 ping www.baidu.com 动作,会将百度的域名在本地转换成ip地址,然后走路由 ...

  2. ubuntu下设置数据库字符集

    就linux环境下出现的数据库乱码的问题,以ubuntu为例进行的总结 ubuntu环境设置的字符集utf8,windows默认字符集是GBK,Ubuntu的默认字符集为utf-8,这使 得在用tel ...

  3. Ubuntu中设置静态IP和DNS

    在Ubuntu中设置静态IP共两步:1>设置IP:2>设置DNS1>设置IP    编辑 /etc/network/interface文件:       sudo vi /etc/n ...

  4. Ubuntu中设置静态IP和DNS(转载)

    原文地址:http://blog.sina.com.cn/s/blog_669421480102v3bb.html VMware 中使用网络,对虚拟机设置静态IP:在Ubuntu中设置静态IP共两步: ...

  5. 阿里云服务器ubuntu 配置

    由于阿里云的导入自定义 ubuntu 镜像需要开通 OSS 快照是收费的(看着感觉不贵,但是也很麻烦),而且自己已配置好的镜像想导入需要转换格式,还存在不能使用的情况,所以麻烦点直接在阿里云原来的ub ...

  6. [转载]ubuntu防火墙设置

    原文地址:ubuntu防火墙设置作者:風飏    自打2.4版本以后的Linux内核中, 提供了一个非常优秀的防火墙工具.这个工具可以对出入服务的网络数据进行分割.过滤.转发等等细微的控制,进而实现诸 ...

  7. Ubuntu命令设置ip网关dns

    本文系转载,介绍Ubuntu如何设置IP和网络来连接网络 如果是在虚拟机中使用Ubuntu,那么设置之前请先参照我的上一遍文章虚拟机Net方式设置连接外网中的网络设置部分,先设置好主机的网络,然后配置 ...

  8. Ubuntu下设置VNCServer

    Ubuntu下设置VNCServer Virtual Network Computing(VNC)是进行远程桌面控制的一个软件.客户端的键盘输入和鼠标操作通过网络传输到远程服务器,控制服务器的操作.服 ...

  9. Linux服务器安全登录设置记录

    在日常运维工作中,对加固服务器的安全设置是一个机器重要的环境.比较推荐的做法是:1)严格限制ssh登陆(参考:Linux系统下的ssh使用(依据个人经验总结)):     修改ssh默认监听端口    ...

  10. ubuntu server设置时区和更新时间

    ubuntu server设置时区和更新时间 今天测试时,发现时间不对,查了一下时区: data -R    结果时区是:+0000 我需要的是东八区,这儿显示不是,所以需要设置一个时区   一.运行 ...

随机推荐

  1. jQuery模态框原理

    <!-- 引入jQuery.js --> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquer ...

  2. cmder右键打开方式

    第一步: 新打开一个cmder窗口 第二步: 输入: Cmder.exe /register user 或 Cmder.exe /register all 第三步: 回车执行命令

  3. kettle从入门到精通 第五十五课 ETL之kettle Excel输入

    1. Excel输入,Microsoft Excel输入步骤的作用是从Microsoft Excel中读取数据,如下图所示: 1)Excel输入步骤从文件D:\data\测试数据.xlsx读取数据. ...

  4. kettle从入门到精通 第五十二课 ETL之kettle Avro output

    1.上一节课我们学习了avro input,本节课我们一起学习下avro out步骤. 本节课通过json input 加载json文件,通过avro out 生成avro二进制文件,写日志步骤打印日 ...

  5. web框架及Django简介

    WEB框架 Web框架是一种开发框架,用来支持动态网站.网络应用和网络服务的开发.这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法. web框架已经实现了很多功能 ...

  6. NET8中增加的简单适用的DI扩展库Microsoft.Extensions.DependencyInjection.AutoActivation

    这个库提供了在启动期间实例化已注册的单例,而不是在首次使用它时实例化. 单例通常在首次使用时创建,这可能会导致响应传入请求的延迟高于平时.在注册时创建实例有助于防止第一次Request请求的SLA 以 ...

  7. elasticsearch6.8 ik分词器需安装

    elasticsearch6.8  ik分词器需安装order_info_es/_analyze POST{ "analyzer": "ik_max_word" ...

  8. Android无障碍自动化结合opencv实现支付宝能量自动收集

    Android无障碍服务可以操作元素,手势模拟,实现基本的控制.opencv可以进行图像识别.两者结合在一起即可实现支付宝能量自动收集.opencv用于识别能量,无障碍服务用于模拟手势,即点击能量. ...

  9. CLR via C# 笔记 -- 委托(17)

    1. 委托是方法的包装器,使方法能通过包装器来间接回调.在一个类型中通过委托来调用另一个类型的私有成员,只要委托对象是具有足够安全性/可访问性的代码创建,便没有问题. 2. 协变性:方法能返回从委托的 ...

  10. 更难、更好、更快、更强:LLM Leaderboard v2 现已发布

    摘要 评估和比较大语言模型 (LLMs) 是一项艰巨的任务.我们 RLHF 团队在一年前就意识到了这一点,当时他们试图复现和比较多个已发布模型的结果.这几乎是不可能完成的任务:论文或营销发布中的得分缺 ...