当前位置: 首页 > article >正文

Ubuntu服务器内存不够用?手把手教你调整swap分区到64G(附dd命令详解)

Ubuntu服务器内存优化实战从Swap原理到64G分区精准配置引言当物理内存遇到性能瓶颈凌晨三点数据库突然崩溃的报警短信惊醒了你。登录服务器查看日志发现是OOM Killer终止了MySQL进程——这台承载着企业核心业务的Ubuntu服务器再次因内存不足而崩溃。这不是简单的服务重启能解决的问题而是典型的资源规划缺陷。对于运行内存密集型应用如TensorFlow训练、Elasticsearch索引或Redis缓存的服务器物理内存耗尽时的应对策略直接决定系统稳定性。Swap空间本质上是磁盘上的虚拟内存当物理RAM耗尽时内核将不活跃的页面移出到这块特殊区域。虽然磁盘I/O速度远低于RAMNVMe SSD的延迟约100μs而DDR4内存仅50ns但合理的Swap配置能预防OOM Killer强制终止关键进程为内存回收机制提供缓冲区间允许系统进入休眠状态hibernate处理突发内存需求峰值特别是在云环境或容器化部署中过度依赖物理内存扩容不仅成本高昂还可能因供应商实例规格限制而无法实现。本文将深入解析Swap调优的工程实践手把手演示如何安全配置64G Swap分区并揭秘dd命令背后的存储原理。1. Swap配置前的关键诊断1.1 内存压力评估方法论在调整Swap前需要量化当前系统的内存压力。单纯看free -h的输出远远不够专业运维人员应该关注以下指标# 综合内存指标推荐 $ vmstat -SM 1 5 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 1024 3245 123 4567 0 0 12 34 567 1234 10 5 80 5 0 # 详细页交换统计 $ sar -B 1 3 Linux 5.4.0-135-generic (hostname) 06/15/2023 _x86_64_ (32 CPU) 03:00:01 AM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff 03:00:02 AM 0.00 456.12 1234.56 0.12 3456.78 123.45 0.00 123.45 99.87关键参数解读指标正常范围危险阈值说明swpd1G5G已用Swap空间量si/so0100/s每秒Swap进出页数%wa5%30%I/O等待CPU占比majflt/s110主要缺页异常次数诊断提示当si/so持续高于50/s或majflt/s频繁出现时说明系统正在经历严重的页交换抖动thrashing此时单纯增加Swap可能适得其反需要结合应用层优化。1.2 应用内存画像分析不同工作负载对Swap的需求差异巨大# 按进程统计内存使用 $ smem -tk PID User Command Swap USS PSS RSS 1234 mysql /usr/sbin/mysqld 1.2G 3.5G 3.8G 4.0G 5678 python /usr/bin/python3 train.py 2.4G 8.1G 8.3G 8.5G典型应用场景的Swap配置建议应用类型推荐Swap大小特殊考量关系型数据库内存的50-100%避免交易日志写入Swap机器学习训练内存的25-50%需配合CUDA pinned memory内存缓存系统内存的10-25%监控eviction rate常规Web服务内存的25%关注OOM Killer日志2. Swap文件创建工程实践2.1 存储设备选型决策Swap性能核心取决于存储介质以下是常见介质的页交换延迟对比介质类型顺序读写延迟随机4K读写延迟适合Swap等级NVMe SSD100μs150μs★★★★★SATA SSD500μs800μs★★★★HDD 7200rpm5ms15ms★内存50ns100ns基准参考性能忠告如果必须使用HDD作为Swap设备建议设置vm.swappiness10以下并优先考虑垂直记录式PMR硬盘。2.2 64G Swap文件精准创建传统dd命令创建大文件时存在效率问题现代Linux系统推荐使用fallocate# 更高效的文件预分配EXT4/XFS文件系统 sudo fallocate -l 64G /swapfile # 验证文件属性 ls -lh /swapfile -rw------- 1 root root 64G Jun 15 03:00 /swapfile # 如果文件系统不支持fallocate如Btrfs再使用dd sudo dd if/dev/zero of/swapfile bs1M count65536 convnotrunc,noerror statusprogressdd参数深度解析# 专业级参数组合示例 sudo dd if/dev/zero of/swapfile \ bs4M \ # 大块提升吞吐 count16384 \ # 64GB/(4MB)16384 convnotrunc,noerror \ # 出错继续且不截断 iflagfullblock \ # 确保完整块读取 oflagdirect \ # 绕过页面缓存 statusprogress # 实时显示进度块大小(bs)优化实验数据块大小创建时间写入速度推荐场景512K3m28s315MB/s机械硬盘1M1m44s615MB/sSATA SSD4M52s1.2GB/sNVMe SSD64M49s1.3GB/s企业级存储2.3 安全性与权限配置错误的权限设置会导致安全漏洞必须严格执行# 权限加固三步曲 sudo chmod 600 /swapfile # 禁止全局读写 sudo chown root:root /swapfile # 确保属主正确 sudo mkswap -f /swapfile # 强制初始化 # 高级安全审计 sudo lsattr /swapfile # 检查特殊属性 sudo chattr i /swapfile # 可选添加不可变标志3. 内核参数调优策略3.1 Swappiness动态调节vm.swappiness参数控制内核使用Swap的倾向性# 查看当前值 cat /proc/sys/vm/swappiness 60 # 临时调整为更保守的值适合数据库服务器 sudo sysctl vm.swappiness10 # 永久生效配置 echo vm.swappiness10 | sudo tee -a /etc/sysctl.conf不同场景的推荐值工作负载类型swappiness值理论依据内存缓存节点1-10最大限度保留缓存OLTP数据库10-30平衡内存压力与交易延迟科学计算30-60允许适度交换以完成计算桌面环境60-100优先保证交互流畅度3.2 页缓存回收激进度vm.vfs_cache_pressure影响内核回收目录项和inode缓存的倾向# 通常建议设置为较激进的值默认100 sudo sysctl vm.vfs_cache_pressure150内存回收策略对比实验配置组合内存回收延迟吞吐量影响适用场景swappiness30 cache_pressure150中等5%通用服务器swappiness10 cache_pressure200低1-2%数据库主机swappiness60 cache_pressure100高10-15%突发负载4. 生产环境验证方案4.1 压力测试与监控使用stress-ng模拟内存压力# 安装测试工具 sudo apt install stress-ng # 启动内存压力测试占用48G内存 stress-ng --vm 12 --vm-bytes 4G --vm-keep --timeout 1h # 实时监控Swap使用 watch -n1 grep -E Swap|Mem /proc/meminfo关键监控指标告警阈值指标警告阈值严重阈值监控命令Swap使用率50%80%free -h页交换频率100/s500/svmstat 1主要缺页5/s20/ssar -B 14.2 性能回归测试使用sysbench进行前后对比# 内存测试基准 sysbench memory --memory-block-size1G --memory-total-size100G run # 文件I/O测试评估Swap影响 sysbench fileio --file-total-size50G prepare sysbench fileio --file-test-moderndrw --time300 --max-requests0 run典型优化前后对比数据测试项无Swap64G Swap(NVMe)提升幅度MySQL TPS崩溃12,356N/ATensorFlow epoch时间OOM2m13sN/A内存申请延迟不可用150μsN/A5. 高级应用场景配置5.1 多Swap文件负载均衡对于高性能NVMe阵列可以创建多个Swap文件实现并行# 在多个NVMe设备上创建Swap for i in {1..4}; do sudo fallocate -l 16G /mnt/nvme${i}/swapfile sudo mkswap /mnt/nvme${i}/swapfile sudo swapon --priority 100 /mnt/nvme${i}/swapfile done # 验证多设备激活 swapon --show NAME TYPE SIZE USED PRIO /mnt/nvme1/swapfile file 16G 0B 100 /mnt/nvme2/swapfile file 16G 0B 100 /mnt/nvme3/swapfile file 16G 0B 100 /mnt/nvme4/swapfile file 16G 0B 1005.2 ZRAM混合配置方案对于内存受限设备可结合ZRAM压缩技术# 安装ZRAM工具 sudo apt install zram-config # 配置ZRAM为内存的25% echo PERCENT25 | sudo tee /etc/default/zramswap sudo systemctl restart zramswap # 查看ZRAM设备 cat /proc/swaps /dev/zram0 partition 8G 0B 3混合架构性能对比配置方案内存节省率额外CPU开销适用场景纯Swap文件0%低大内存服务器ZRAMSwap30-50%中内存受限设备纯ZRAM50-70%高嵌入式系统6. 故障排除与应急方案6.1 常见问题诊断问题现象Swap已使用但si/so持续为0原因内存页被换出后未被访问无需换入解决方案通过pgrep查找休眠进程并唤醒问题现象dd命令卡住无响应原因磁盘空间不足或文件系统冻结解决方案使用pv命令监控进度sudo pv -petr /dev/zero | dd of/swapfile bs1M count655366.2 紧急恢复步骤当Swap引发系统僵死时通过SSH或物理控制台登录快速释放内存sync; echo 3 /proc/sys/vm/drop_caches临时禁用Swapswapoff -a识别并终止问题进程ps -eo pid,comm,%mem --sort-%mem | head -n 10 kill -9 [TOP_PID]7. 自动化运维集成7.1 Ansible部署模板- name: Configure 64G Swap hosts: database_servers become: yes tasks: - name: Create swapfile command: | fallocate -l 64G /swapfile || dd if/dev/zero of/swapfile bs1M count65536 args: creates: /swapfile - name: Set swap permissions file: path: /swapfile mode: 0600 owner: root group: root - name: Initialize swap command: mkswap -f /swapfile when: not ansible_mounts | json_query([?mount/].fstype) btrfs - name: Enable swap mount: name: none src: /swapfile fstype: swap opts: sw state: present7.2 Prometheus监控规则groups: - name: memory_alerts rules: - alert: HighSwapUsage expr: (node_memory_SwapTotal_bytes - node_memory_SwapFree_bytes) / node_memory_SwapTotal_bytes 0.7 for: 15m labels: severity: warning annotations: summary: High swap usage on {{ $labels.instance }} description: Swap usage at {{ $value | humanizePercentage }} for 15 minutes - alert: SwapThrashing expr: rate(node_vmstat_pswpin[1m]) rate(node_vmstat_pswpout[1m]) 1000 for: 5m labels: severity: critical annotations: summary: Swap thrashing on {{ $labels.instance }} description: Swap I/O at {{ $value | humanize }} pages/sec8. 架构级优化建议对于长期面临内存压力的系统应考虑应用层优化MySQL的innodb_buffer_pool_size调优Java应用的-Xmx参数合理化Python机器学习改用内存映射文件基础设施升级# 计算内存成本效益比 MEM_COST$(aws ec2 --query Price --output text \ --filter Nameinstance-type,Valuesr6i.8xlarge) SWAP_COST$(aws ebs --volume-type gp3 --size 64 \ --query Price --output text) echo 内存扩容成本比: $(( MEM_COST / SWAP_COST ))云原生方案Kubernetes的LocalPV Swap配置容器内存限制与Swap关系# 在Docker中启用Swap docker run -it --memory8g --memory-swap12g ubuntu最终检查清单[ ] 确认/etc/fstab有nofail选项防止启动失败[ ] 测试服务器重启后Swap自动加载[ ] 配置日志监控/var/log/kern.log中的OOM事件[ ] 建立定期Swap健康检查机制

相关文章:

Ubuntu服务器内存不够用?手把手教你调整swap分区到64G(附dd命令详解)

Ubuntu服务器内存优化实战:从Swap原理到64G分区精准配置 引言:当物理内存遇到性能瓶颈 凌晨三点,数据库突然崩溃的报警短信惊醒了你。登录服务器查看日志,发现是OOM Killer终止了MySQL进程——这台承载着企业核心业务的Ubuntu服…...

别再手动复制了!一个Python脚本自动整理500篇论文,支持Zotero导入

一、引言 作为一名科研工作者,我相信你一定有过这样的经历:为了写一篇综述,需要在知网、万方、arXiv等多个平台搜索上百篇论文,然后手动复制粘贴标题、作者、摘要、关键词,再整理到Excel里。有时候一篇论文就要花好几分钟,几百篇下来,大半天时间就没了。更崩溃的是,手…...

数据库实施是数据库设计完成后,将设计成果转化为实际可运行数据库系统的过程,是软件系统开发中的关键环节

数据库实施是数据库设计完成后,将设计成果转化为实际可运行数据库系统的过程,是软件系统开发中的关键环节。该阶段主要包括建立实际数据库结构和数据加载两大核心任务,以下是详细知识点说明: 1. 数据库实施的基本概念 数据库实施是…...

系统将自动清除超出预约期限的预约记录并修改相关信息

若图书流通室没有读者要借的书,可为该读者建立预约登记,记录读者ID、书的ISBN号、预约时间和预约期限(最长为10天)。一旦其他读者归还这种书,系统自动通知该预约读者。系统将自动清除超出预约期限的预约记录并修改相关…...

数据库设计分为四个主要阶段:需求分析、概念结构设计、逻辑结构设计、物理设计

数据库设计分为四个主要阶段:需求分析、概念结构设计、逻辑结构设计、物理设计。各阶段主要产物如下: 1.2 E-R图与关系模式转换规则 (1)实体转换:一个实体对应一个关系模式,实体的属性作为关系的属性&#…...

从‘对齐’到‘适配’:手把手教你为PCL点云配准定制加权FitnessScore(附C++代码)

从‘对齐’到‘适配’:手把手教你为PCL点云配准定制加权FitnessScore(附C代码) 在工业级3D扫描应用中,通用点云配准评估指标往往难以满足特定场景的精度需求。想象一下这样的场景:您需要对一个精密机械零件进行三维重建…...

Magnet2Torrent终极指南:将磁力链接永久保存为种子文件的简单方法

Magnet2Torrent终极指南:将磁力链接永久保存为种子文件的简单方法 【免费下载链接】Magnet2Torrent This will convert a magnet link into a .torrent file 项目地址: https://gitcode.com/gh_mirrors/ma/Magnet2Torrent 还在为磁力链接失效而烦恼吗&#x…...

思源黑体TTF:免费开源多语言字体构建终极指南

思源黑体TTF:免费开源多语言字体构建终极指南 【免费下载链接】source-han-sans-ttf A (hinted!) version of Source Han Sans 项目地址: https://gitcode.com/gh_mirrors/so/source-han-sans-ttf 思源黑体TTF是一款基于Adobe和Google思源黑体项目的TrueType…...

Sunshine游戏串流5步掌握:如何实现跨设备游戏自由?

Sunshine游戏串流5步掌握:如何实现跨设备游戏自由? 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 你是否曾经梦想过在平板上畅玩PC上的3A大作?…...

告别握手烦恼:用FIFO封装Xilinx DDR3 MIG IP,让图像处理数据流更丝滑

告别握手烦恼:用FIFO封装Xilinx DDR3 MIG IP,让图像处理数据流更丝滑 在FPGA开发中,处理高速数据流(如图像采集、视频处理等)时,DDR3存储器的使用几乎是不可避免的。然而,直接使用Xilinx的MIG&a…...

视觉状态表示学习:CroBo框架解析与应用

1. 视觉状态表示学习的核心挑战在动态环境中运行的机器人需要从连续的视频观察中学习视觉状态表示,以支持序列决策。这一任务的核心在于如何将原始视觉输入编码为既紧凑又富含任务相关信息的表示形式。传统自监督学习方法(如MAE、DINO)虽然在…...

联邦学习中的ROC与PR曲线评估优化策略

1. 联邦学习中的评估指标困境在分布式机器学习领域,联邦学习因其隐私保护特性近年来备受关注。但当我们尝试在这种特殊架构下评估模型性能时,传统集中式机器学习的那套评估方法开始显得力不从心。特别是在处理非平衡数据集时,准确率&#xff…...

Firefly RK3588Q开发板开箱实录:从Buildroot固件烧写到成功启动的完整避坑指南

Firefly RK3588Q开发板开箱实录:从Buildroot固件烧写到成功启动的完整避坑指南 第一次拿到Firefly RK3588Q开发板时,那种兴奋感至今记忆犹新。作为一款基于Rockchip RK3588 SoC的高性能开发板,它拥有强大的计算能力和丰富的外设接口&#xff…...

使用 Node.js 快速构建基于 Taotoken 多模型的内容生成服务

使用 Node.js 快速构建基于 Taotoken 多模型的内容生成服务 1. 环境准备与基础配置 在开始构建内容生成服务前,请确保已安装 Node.js 16 或更高版本。创建一个新项目目录并初始化 npm 包管理: mkdir taotoken-content-service cd taotoken-content-se…...

AI规则构建引擎:用自然语言生成可执行业务逻辑的技术实践

1. 项目概述:一个AI驱动的规则构建引擎最近在开源社区里看到一个挺有意思的项目,叫ai-rules-builder。光看名字,你可能会觉得这又是一个蹭AI热度的工具,但实际深入了解一下,你会发现它的定位非常精准,解决的…...

047、Pandas数据清洗:处理缺失值与重复值

047、Pandas数据清洗:处理缺失值与重复值 昨天排查线上问题,一个数据分析脚本突然报错KeyError,追查发现是某列数据突然出现大量NaN,下游处理没做容错直接用了字典推导。这种问题在真实数据中太常见了——传感器断连、用户未填写、系统导出异常,缺失值和重复值就像代码里…...

如何快速检测微信单向好友?WechatRealFriends帮你发现谁悄悄删除了你

如何快速检测微信单向好友?WechatRealFriends帮你发现谁悄悄删除了你 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatR…...

基于安卓的美食探店与菜谱分享系统毕设源码

博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在设计并实现一款基于安卓平台的集成化美食探店与菜谱分享系统以解决当前餐饮信息获取与共享过程中存在的多重问题。随着移动互联网技术的普及及智能手机…...

终极音乐解锁指南:如何在浏览器中免费解密加密音乐文件

终极音乐解锁指南:如何在浏览器中免费解密加密音乐文件 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: http…...

基于WebSocket与Redis的轻量级实时社交应用架构设计与实现

1. 项目概述:从“Klatsch”看现代社交应用的轻量化突围最近在GitHub上闲逛,发现一个挺有意思的项目叫“donapart/klatsch”。光看名字“Klatsch”,一个德语词,原意是“闲聊”、“八卦”,你大概就能猜到它的方向了——一…...

持续测试流水线的瓶颈分析与优化

在软件研发效能与质量保障日益成为核心竞争力的今天,持续测试(Continuous Testing)作为DevOps和持续交付(Continuous Delivery)实践中的关键一环,其价值已无需赘言。它旨在通过自动化测试手段,在…...

长期使用Taotoken服务后对其计费准确性与账单清晰度的评价

长期使用Taotoken服务后对其计费准确性与账单清晰度的评价 1. 计费准确性体验 在持续使用Taotoken服务超过六个月后,我们对平台的按Token计费机制有了较为全面的认识。作为统一接入多家大模型API的平台,Taotoken的计费系统能够精确到单次API调用的Toke…...

八大网盘直链下载助手:告别限速困扰,一键获取真实下载链接的终极指南

八大网盘直链下载助手:告别限速困扰,一键获取真实下载链接的终极指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云…...

惠普OMEN游戏本终极风扇控制指南:如何用开源工具提升30%性能

惠普OMEN游戏本终极风扇控制指南:如何用开源工具提升30%性能 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度,自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub OmenSuperHub是一款专为惠普OMEN游…...

一维卷积 结构

Conv1d 一维卷积图解 在深度学习中,卷积层是许多深度神经网络的主要构建块。该设计的灵感来自视觉皮层,其中单个神经元对视野的受限区域(称为感受野)做出反应。这些区域的集合重叠以覆盖整个可见区域。 虽然卷积层最初应用于计算…...

西工大计算机801/871专业课二选一?过来人用血泪史告诉你:操作系统是保底,数据结构慎选!

西工大计算机考研专业课二选一:用决策树模型破解801与871的选择困境 站在西工大计算机考研的十字路口,801(计算机网络操作系统)与871(数据结构操作系统)的专业课组合让无数考生陷入选择困难症。作为经历过两…...

3分钟快速掌握PinWin:Windows窗口置顶的终极解决方案

3分钟快速掌握PinWin:Windows窗口置顶的终极解决方案 【免费下载链接】PinWin Pin any window to be always on top of the screen 项目地址: https://gitcode.com/gh_mirrors/pin/PinWin 你是否经常需要在多个窗口间来回切换,浪费宝贵时间&#…...

Ubuntu 20.04/22.04 更换阿里云、清华源后,安装软件依然报错?可能是你漏了这关键一步

Ubuntu 20.04/22.04 换源后安装报错?你可能忽略了这些关键细节 最近在帮团队调试几台新部署的Ubuntu服务器时,遇到了一个看似简单却困扰了不少人的问题:明明已经将软件源更换为阿里云或清华镜像站,执行apt install时却依然报错&q…...

2025网盘直链下载完整指南:LinkSwift开源工具深度解析与实战教程

2025网盘直链下载完整指南:LinkSwift开源工具深度解析与实战教程 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云…...

解决LabVIEW大量数据实时刷新卡顿方案

解决LabVIEW大量数据实时刷新卡顿方案 优化数据缓冲与传输 在LabVIEW中,使用生产者-消费者模式分离数据采集与显示逻辑。通过队列或异步通信传递数据块,避免阻塞采集线程。C#端可采用类似的双缓冲机制,后台线程填充数据,UI线程定时…...