swap 空间去哪里了?

2023-10-31

问题背景

xxxx 项目中,在内存充足的情况下 swap 被使用,需要优化并释放

问题分析过程

内核参数没有配置:vm.swappiness=0

0表示最大限度使用物理内存,其次才是 swap 空间;

默认值应该是60;

100表示积极的使用 swap 空间,并且把内存上的数据及时搬运到swap空间中

free -h 命令查看结果:swap 空间被使用500M

脚本分析 swap 使用进程:

#!/bin/bash
#Author:whale
#Version:1.0
#Date:2022-11-10
#Description:Analyze swap usage


info_swap () {
  ##获取/proc下面的进程PID
  pid=$(find /proc -maxdepth 1 -regex "/proc/[0-9]+" -type d -printf "%f\n")

  ##统计各进程的swap使用情况
  for i in ${pid}
  do
    ##进程名称
    proName=$(ps -p $i -o comm --no-headers)
    ##swap使用统计
    grep 'Swap' /proc/$i/smaps >/dev/null 2>&1
    if [ $? -eq 0 ];then
      proSwapSum=$(grep Swap /proc/$i/smaps 2>/dev/null | awk '{sum+=$2}END{printf "swapSum=%s",sum}');
      echo "pid=$i  process=${proName}  ${proSwapSum}" >> /tmp/swap.info;
    fi
  done
}

info_swap

##显示swap空间使用的前10进程后删除相关记录文件
cat /tmp/swap.info |sort -t '=' -k 4 -r |head && rm -rf /tmp/swap.info

分析结果:nginx、mysql、dotnet等关键进程都使用了一部分swap空间

处理方案

  1. 优化内核参数:echo "vm.swappiness=0" >> /etc/sysctl.conf

  2. 释放现有的swap空间(测试环境截图举例)

    • 查看swap的挂载信息:swapon -s (得到具体的挂载磁盘信息)

    类似于:

image

  • 取消swap挂载:swapoff /dev/sda2

这步操作会将swap内容逐步复制到内存中,swap使用的越多,释放的也就越多,相应的命令执行的时间就越长,按照生产环境的经验,释放的速度并不是很快,需要耐心等待一下,也可以再开一个窗口,查看free -h命令,可以肉眼明显看到使用大小逐步释放,也需要注意本身的内存空间是否还有剩余,是否必须要做现有swap空间释放的操作

  • 重新挂载swap:swapon /dev/sda2

  • 周期性查看swap使用情况:不出意外的应该就是很少用到swap空间,如果后续还用到了,那就证明内存不够了,赶紧扩容吧

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

swap 空间去哪里了? 的相关文章

  • 在 Linux 上使用多处理时,TKinter 窗口不会出现

    我想生成另一个进程来异步显示错误消息 同时应用程序的其余部分继续 我正在使用multiprocessingPython 2 6 中的模块来创建进程 我试图用以下命令显示窗口TKinter 这段代码在Windows上运行良好 但在Linux上
  • 使用 sh 运行 bash 脚本

    我有 bash 脚本 它需要 bash 另一个人尝试运行它 sh script name sh 它失败了 因为 sh 是他的发行版中 dash 的符号链接 ls la bin sh lrwxrwxrwx 1 root root 4 Aug
  • 有谁知道在哪里定义硬件、版本和序列号。 /proc/cpuinfo 的字段?

    我想确保我的 proc cpuinfo 是准确的 目前它输出 Hardware am335xevm Revision 0000 Serial 0000000000000000 我可以在代码中的哪里更改它以给出实际值 这取决于 Linux 的
  • 如何授予 apache 使用 NTFS 分区上的目录的权限?

    我在一台带有 20GB 硬盘的旧机器上运行 Linux Lubutu 12 10 我有一个 1 TB 外部硬盘 上面有一个 NTFS 分区 在该分区上 有一个 www 目录 用于保存我的网页内容 它在启动时自动安装为 media t515
  • docker容器大小远大于实际大小

    我正在尝试从中构建图像debian latest 构建后 报告的图像虚拟大小来自docker images命令为 1 917 GB 我登录查看尺寸 du sh 大小为 573 MB 我很确定这么大的尺寸通常是不可能的 这里发生了什么 如何获
  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su
  • CoAP数据包的大小是多少?

    我是这项技术的新手 有人可以帮助我了解一些疑问吗 Q 1 CoAP数据包的大小是多少 我知道有 4 字节固定标头 但是包括标头 选项和负载在内的最大大小限制是多少 Q 2 有像MQTT那样的Keep Alive的概念吗 它在UDP上工作 它
  • 内核模式下的线程(和进程)与用户模式下的线程(和进程)有什么区别?

    我的问题 1 书中现代操作系统 它说线程和进程可以处于内核模式或用户模式 但没有明确说明它们之间有什么区别 2 为什么内核态线程和进程的切换比用户态线程和进程的切换花费更多 3 现在 我正在学习Linux 我想知道如何在LINUX系统中分别
  • 需要一些建议来开始在 ARM(使用 Linux)平台上编程

    我 也许 很快就会在托管 Linux 发行版的 ARM 平台上工作 我不知道哪个发行版 我知道该项目涉及视频流 但我无法告诉你更多信息 其实我只收到通知 还没见到任何人 我从来没有在这样的平台上工作过 所以我的想法是在项目开始之前进行测试
  • waitpid() 的作用是什么?

    有什么用waitpid 它通常用于等待特定进程完成 或者如果您使用特殊标志则更改状态 基于其进程 ID 也称为pid 它还可用于等待一组子进程中的任何一个 无论是来自特定进程组的子进程还是当前进程的任何子进程 See here http l
  • 在两次之间每分钟执行一次 Cronjob

    我需要在 crontab 中每分钟运行一个 bash 脚本8 45am and 9 50am每天的 Code 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 8 home pull sh gt ho
  • 子目录中的头文件(例如 gtk/gtk.h 与 gtk-2.0/gtk/gtk.h)

    我正在尝试使用 GTK 构建一个 hello world 其中包括以下行 include
  • Windows CE 与嵌入式 Linux [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 现在我确信我们都清楚 Linux 与 Windows 桌面的相对优点 然而 我对嵌入式开发世界的了解却少得多 我主要对行业解决方案感兴
  • 高效的内存屏障

    我有一个多线程应用程序 其中每个线程都有一个整数类型的变量 这些变量在程序执行期间递增 在代码中的某些点 线程将其计数变量与其他线程的计数变量进行比较 现在 我们知道在多核上运行的线程可能会无序执行 一个线程可能无法读取其他线程的预期计数器
  • 在 Mac OSX 上交叉编译 x86_64-unknown-linux-gnu 失败

    我尝试将我的 Rust 项目之一编译到 x86 64 unknown linux gnu 目标 cargo build target x86 64 unknown linux gnu Compiling deployer v0 1 0 fi
  • Mcrt1.o和Scrt1.o有什么用?

    我坚持使用以下两个文件 即 Mcrt1 o 和 Scrt1 o 谁能帮我知道这两个文件的用途 如何使用它 我们以 gcrt1 o 为例 在使用 pg 选项编译进行性能测试时非常有用 谢谢 表格的文件 crt o总是 C 运行时启动代码 大部
  • 当用户按下打印时运行脚本,并且在脚本结束之前不开始假脱机(linux,cups)

    我需要做的是结合用户按下打印来执行 python 程序 脚本 并且在该程序退出之前不要让打印作业假脱机 原因是打印驱动程序不是开源的 我需要更改用户设置 在本例中是部门 ID 和密码 通常是每个用户 但因为这是一个信息亭 具有相同帐户的不同
  • 如何在 GNU/Linux 上设置 Subversion (SVN) 服务器 - Ubuntu [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一台运行 Ubuntu 的笔记本电脑 我想将其用作 Subversion 服务器 既让我自己在本地承诺 也让其他人远程承诺 要使其
  • vagrant ssh -c 并在连接关闭后保持后台进程运行

    我正在编写一个脚本来启动和后台流浪机器内的进程 似乎每次脚本结束和 ssh 会话结束时 后台进程也会结束 这是我正在运行的命令 vagrant ssh c cd vagrant src nohup python hello py gt he

随机推荐

  • Java : 方法 PrintStream.println(Object)不适用 (实际参数列表和形式参数列表长度不同)

    报错原因 之前一直使用python 用 习惯了 在Java中 应该作为String类型才能被识别 不能直接使用 连接两个变量 贴报错代码和修改之后的代码 public class Operator public static void ma
  • WIN10登陆时出现“被引用的帐户当前被锁定且可能无法登录”,如何解决?

    解决方法 一旦遇到 被引用的帐户当前被锁定且可能无法登录 错误 建议离开PC 30分钟 这是一个等待时间 通常由系统管理员设置 如果用户输入了错误的密码 等待30分钟后 登录屏幕可能会解锁 您可能有第二次机会访问桌面 如果您已成功访问桌面
  • 文献按时间排序_论文参考文献详解~

    论文参考文献标注方法一般是顺序编码制 顺序编码制 Numerical References Method 是一种文后参考文献的标注体系 即引文采用序号标注 参考文献按引文的序号排序 在论文中的引用处以右上标 小四宋体 加方括号的方式表示 不
  • Android Bluetooth AVRCP

    本篇blog继续以结合日志的形式来分析AVRCP 以手机连接上耳机后 通过耳机控制音乐播放的暂停 播放来分析AVRCP的过程 1 AVRCP 本章基于A V Remote Control Profile 1 6 2 Bluetooth Te
  • Python Spyder 调出缩进对齐线

    初学python 对python的对齐很重视 为了防止出错 使用spyder工具提供的功能 下面是方法 1 首先打开Tools菜单栏下的Preferences 出现如下界面 轻松1 2 3步之后就可以发现有 当然 红色的矩形框是我自己通过画
  • 2022年Android面经分享,准备Android面试

    前言 前几天一个多年的朋友和我聊天 说他被公司裁员了 我听了非常吃惊 我这个朋友之前在一家著名的外企公司已经工作10年以上了 级别也还不错 算是中高层了 前几年创业最火爆的时候 我和其他人想拉这位朋友出来一起干 怎么诱惑 怎么画大饼他都不动
  • Ubuntu18.04安装cuda10以及cuda版本的opencv3.4.13

    目录 一 cuda 二 cuda版本的Opencv3 4 13 一 cuda 首先提前安装好显卡驱动 在软件与更新 附加驱动里面直接安装即可 这个很简单 不再赘述 查看自己应该安装的版本CUDA 12 0 Update 1 Release
  • html返回200错误,http – 为什么在404错误页面上有200 OK标题状态是不是很糟糕?...

    我有一个问题我遇到了麻烦 err404页面的200OK标题状态问题 虽然它应该是404标题 200好有什么问题 真有可能200 OK应该在404错误页面标题状态 感谢建议 非常感谢 我想它与 htaccess有关 这是我的 htaccess
  • 报错:Cannot read properties of undefined (reading ‘commit‘)

    上传头像的时候出现了这样的报错 根据代码的反应锁定应该是上传vuex方法的问题 找出问题的方法 打印 this update avatar 发现是undefined 打印this 发现属性中没有 route方法 然后搜索main js发现没
  • Docker的基本操作2

    CSDN话题挑战赛第2期 参赛话题 学习笔记 个人名片 博主 酒徒 个人简介 沉醉在酒中 借着一股酒劲 去拼搏一个未来 本篇励志 三人行 必有我师焉 本项目基于B站黑马程序员Java SpringCloud微服务技术栈 SpringClou
  • realEngine(UE4)实现开关门效果

    UE4系列文章目录 文章目录 UE4系列文章目录 前言 一 制作步骤 注意 前言 虚幻引擎4是一个游戏开发工具的集合 能够生成从2D移动游戏到AAA控制台游戏的一切 它是 方舟 生存进化 铁拳7 和 王国之心III 等游戏的引擎 玩家熟知的
  • python爬虫爬取网页上的天气数据

    目录 一 获取网页重要信息 二 爬取网页数据 三 源码分享 一 获取网页重要信息 在要爬取数据信息的网页上 F12进入查看网页内容 二 爬取网页数据 1 导入模块 import requests from bs4 import Beauti
  • MAC python通过pip安装依赖报错:unresolved reference‘Crypto’ 解决办法

    MAC python通过pip安装依赖报错 unresolved reference Crypto 解决办法 出现这个问题网上大部分的解决办法都试过了 对我来说都没有用 比如通过Pycharm gt Preferences gt Proje
  • Idea创建maven项目,通过java API操作Hbase数据库

    一 准备 启动hdfs集群 之前的HA集群 启动Hbase 二 创建工程 三 API操作Hbase分布式数据库 1 插入一条数据 Test public void put throws Exception 创建conf对象 会加载你项目资源
  • Python数据分析之特征工程

    目录 一 数据清洗 1 数据样本采集 抽样 2 异常值处理 识别异常值和重复值 直接丢弃 包括重复数据 集中值指代 除异常值外的均值 中位数 众数等等 插值 根据不同特征值的具体形式处理 二 特征预处理 1 特征选择 剔除与标注不相关或者冗
  • 谷歌浏览器旧版本下载地址

    谷歌浏览器下载地址 http www chromedownloads net django API学习 地址 https github com LABELNET django mysite frist django API学习 CSDN博客
  • pythonseleniumAPI

    一 浏览器操作 1 浏览器最大化 driver maximize window 将浏览器最大化显示 2 设置浏览器宽 高 driver set window size 480 800 设置浏览器宽480 高800显示 3 控制浏览器前进 后
  • Mac上配置python3的环境变量

    1 查看当前python3的位置 which python3 我的电脑当前地址路径是 usr local bin python3 2 准备好环境变量的配置内容 PATH usr local bin PATH export PATH alia
  • python开篇-------python介绍

    一 python介绍 python的创始人为吉多 范罗苏姆 Guido van Rossum 1989年的圣诞节期间 Guido开始写Python语言的编译器 Python这个名字 来自Guido所挚爱的电视剧Monty Python s
  • swap 空间去哪里了?

    问题背景 xxxx 项目中 在内存充足的情况下 swap 被使用 需要优化并释放 问题分析过程 内核参数没有配置 vm swappiness 0 0表示最大限度使用物理内存 其次才是 swap 空间 默认值应该是60 100表示积极的使用