首页 > 系统相关 >OOM了?物理内存不够了?试试这个方法来提升内存容量,不花钱的

OOM了?物理内存不够了?试试这个方法来提升内存容量,不花钱的

时间:2023-12-02 13:32:32浏览次数:47  
标签:交换文件 OOM 命令 内存 home 内存容量 虚拟内存 物理

OOM了?物理内存不够了?试试这个方法来提升内存容量,不花钱的_物理内存

通过增加虚拟内存来提高内存使用


本文解决的实际问题:

OOM了?物理内存不够了?试试这个方法来提升内存容量,不花钱的_物理内存_02

当我们物理内存小的时候,会出现OOM,然后服务自动死掉的情况。因为物理内存大小是固定的,有没有其他好的办法来解决呢?这里我们可以适当调整Linux的虚拟内存来协作。

问题描述:

OOM了?物理内存不够了?试试这个方法来提升内存容量,不花钱的_物理内存_03


最近遇到一个情况,物理内存不够,导致项目一两天就自动死掉了。服务器物理内存就2GB,上面有好多服务,但是,又不能停,导致一个新上的项目,总是过一两天就自己死掉了。查看启动情况:

OOM了?物理内存不够了?试试这个方法来提升内存容量,不花钱的_虚拟内存_04


添加虚拟内存前,服务重启情况


从上图中,我们可以看到服务重启的频率,是不是相当的高了。解决这种情况,可以有以下两种方案

一、使用脚本定时查询,如果指定服务没有启动,就执行重启动作;

二、能否使用虚拟内存解决呢?

其实第一种方案,凯哥(凯哥Java:kaigejava)也尝试过了。最后还是选择试试第二种方案:提高虚拟内存大小,来解决物理内存捉襟见肘的情况呢?

在使用虚拟内存前,我们先来看看,当前服务器默认的虚拟内存的使用情况,使用top命令查看:

OOM了?物理内存不够了?试试这个方法来提升内存容量,不花钱的_物理内存_05

添加虚拟内存前Swap使用情况

从上图中,我们可以看到,swap区域的默认大小是1GB的,可用空间为0.这说明,交换区域已经被占满了,看来是需要提高swap区大小了。

在使用方案二之前,我们先来介绍以下基础知识:什么是虚拟内存?虚拟内存有什么作用?

虚拟内存是什么?

虚拟内存是一种计算机内存管理技术,它通过将磁盘空间作为辅助存储器来扩展物理内存(RAM),从而提供更大的可用内存空间。其主要作用包括:

有什么作用?

1.扩展可用内存空间: 当物理内存不足以同时容纳运行的所有程序和操作系统所需的数据时,虚拟内存允许操作系统将部分数据移到硬盘上,从而释放物理内存。

2.提供内存抽象: 虚拟内存为每个进程提供了一个独立的、连续的地址空间,使得每个进程感觉自己独占了整个内存。实际上,这些地址可能对应于物理内存中的不同位置,也可能在硬盘上的交换文件中。

3.方便内存共享: 多个进程可以共享相同的虚拟内存地址,而不必实际共享物理内存。这使得进程之间的通信和数据共享更为灵活。

需要注意事项:

对于物理内存较小的实体机,提高虚拟内存空间的确可以对程序运行产生一些帮助,但也有一些注意事项:

a.性能开销 使用虚拟内存会引入性能开销,因为从硬盘读写数据比从物理内存读写数据慢得多。过多地依赖虚拟内存可能会导致性能下降。

b.交换空间 当系统需要释放物理内存时,它会将不常用的数据移到交换文件(虚拟内存)中。如果过度使用交换空间,可能导致硬盘I/O过多,进而影响性能。

总结:

总体而言,虚拟内存是一种在有限物理内存情况下提供更大内存空间的有效手段,但过度使用虚拟内存可能会导致性能问题。在真实的环境中,合理配置虚拟内存大小,结合物理内存和系统负载进行调优,是确保系统平稳运行的关键。

好了,通过上面介绍,我们知道了,虚拟内存是什么了,那么接下来我们,需要思考的是,Linux操作系统下怎么扩大交换区呢?

在Linux系统下怎么创建和启用一个swap file,来提供额外的虚拟内存空间呢?

步骤如下:

OOM了?物理内存不够了?试试这个方法来提升内存容量,不花钱的_重启_06

  1. 在指定目录中创建指定大小的文件,这个文件将被用作交换文件。命令:

sudo fallocate -l 2G /home/swapfile

上面这条命令解读:

用于通过fallocate命令在/home目录下创建一个2GB大小的文件,这个文件将被用作交换文件。

2. 设置第一步文件的权限。命令:

sudo chmod 600 /home/swapfile

命令解读:

设置刚创建的交换文件的权限,将其设置为只有拥有者(owner)有读写权限,没有其他用户或组的权限。

3.将第一步创建的文件设置为Linux交换空间(swap)格式的文件。命令:

sudo mkswap /home/swapfile

解读:

使用mkswap命令将指定文件格式化为Linux交换空间(swap)。

4.将文件设置成系统一部分,用以提供额外虚拟内存。命令:

sudo swapon /home/swapfile

解读:

启用刚刚创建的交换文件,使其成为系统的一部分,以提供额外的虚拟内存。

5.设置系统启动时候自动启用交换文件。命令:

echo '/home/to/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

命令解读:

将一行配置添加到/etc/fstab文件中,该配置用于在系统启动时自动启用交换文件。这个文件系统表(fstab)中的条目指定了系统如何挂载各个文件系统和设备。

通过上面五个步骤之后,我们就创建了一个在home文件夹下,大小为2GB的swapfile虚拟空间了。

我们先来使用top命令查看swap情况:

OOM了?物理内存不够了?试试这个方法来提升内存容量,不花钱的_重启_07

添加虚拟内后,Swap区使用情况

使用free -h命令,来看看,虚拟空间使用情况:

OOM了?物理内存不够了?试试这个方法来提升内存容量,不花钱的_重启_08

查看Swap区已经使用和未使用情况

通过free -h命令,看到,虚拟内存由1GB,变成了2GB.说明我们新增加的2GB虚拟内存添加成功了。

下面是创建虚拟文件并指定的完整命令。

OOM了?物理内存不够了?试试这个方法来提升内存容量,不花钱的_虚拟内存_09

sudo fallocate -l 2G /home/swapfile
sudo chmod 600 /home/swapfile
sudo mkswap /home/swapfile
sudo swapon /home/swapfile
echo '/home/to/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

说明:

请用上面命令,请修改成自己实际的路径


标签:交换文件,OOM,命令,内存,home,内存容量,虚拟内存,物理
From: https://blog.51cto.com/kaigejava/8655226

相关文章

  • PieCloudDB Database 自研内存管理器 ASanAlloc:为产品质量保驾护航
    内存管理是计算机科学中至关重要的一部分,它涉及到操作系统、硬件和软件应用之间的动态交互。有效的内存管理可以确保系统的稳定性和安全性,提高系统运行效率,帮助我们最大限度地利用有效的内存资源,合理分配和回收内存,预防各类内存错误。在计算机科学的早期,内存管理是由程序员手动完成......
  • 后台管理系统浏览器内存占用过高,怎么排查?
    高内存占用可能是多种因素导致的,以下是一些可能的排查步骤:检查浏览器扩展和插件:不必要的扩展和插件可能会消耗大量内存。禁用或删除不需要的扩展,并观察内存使用情况是否有所改善。关闭多余的标签和页面:打开过多的标签和页面会增加内存负担。关闭不需要的标签和页面,尤其是那些包含大......
  • INFINI Labs 产品更新 | 修复 Easysearch 跨集群复制索引同步问题,Gateway 内存异常增
    INFINILabs产品又更新啦~,本次更新主要对Easysearch、Gateway、Console、Agent等产品功能进行优化和相关Bug修复,解决了内存异常增长等问题,以下是详细说明。INFINIEasysearchv1.6.2INFINIEasysearch是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的ApacheLucene......
  • 安天防病毒,麒麟系统,内存溢出,问题排查
    问题:八角 今天客户遇到这个问题,导致系统的业务登录不进去,ssh也登录不上,用显示屏,发现一直报错莱芜 解决步骤:咱这两台跑的一样的应用吗?我看刚才这台是nginx服务?oom了outofmemory了命令:收个sosreport-a,打包下/var/logsosreport-a嗯 在17:30左右......
  • JVM内存模型
    JVM内存模型堆:新生代老年代常量池字符串常量池运行时常量池虚拟机栈:栈帧方法区:元空间本地方法栈:程序计数器:java内存结构(JMM内存模型)主内存:工作内存:java线程高速缓存操作变量时的规则:Java内存模型规定了所有的变量都存储在主内存线程的工作内存中保存了被该......
  • 汇编-Lea将内存地址加载到寄存器
     它的功能主要是将一个有效地址加载到寄存器中,让程序通过寄存器来访问相应的内存地址 lea指令的应用场景在汇编语言中,lea指令应用广泛,它通常用来完成以下几个任务:1.计算地址偏移量:当程序需要访问数组、结构体等数据结构中的某个元素时,我们可以使用lea指令来计算该元素相对......
  • 如何绕过某讯手游保护系统并从内存中获取Unity3D引擎的Dll文件
    ​ 某讯的手游保护系统用的都是一套,在其官宣的手游加固功能中有一项宣传是对比较热门的Unity3d引擎的手游保护方案,其中对Dll文件的保护介绍如下,“Dll加固混淆针对Unity游戏,对Dll模块的变量名、函数名、类名进行加密混淆处理,有效提高静态分析门槛”。 通过动态分析了它的保护......
  • 如何绕过某讯手游保护系统并从内存中获取Unity3D引擎的Dll文件
    ​ 某讯的手游保护系统用的都是一套,在其官宣的手游加固功能中有一项宣传是对比较热门的Unity3d引擎的手游保护方案,其中对Dll文件的保护介绍如下,“Dll加固混淆针对Unity游戏,对Dll模块的变量名、函数名、类名进行加密混淆处理,有效提高静态分析门槛”。 通过动态分析了它的保护......
  • 谷歌Chrome浏览器排查js内存溢出
    1.打开谷歌浏览器检查台2.点击memory3.点击开始快照录制,时隔一会儿录一次,多录几次 4.进行快照对比 ......
  • K8S内POD使用内存缓慢增长问题
    背景生产环境服务容器化后,部分服务频繁触发内存使用超80%告警,POD内存限制内存以及JVM内存设置如下resources:requests: cpu:1000m memory:2200Milimits: cpu:3000m memory:3000MiJAVA_OPTS='-Xmx2000m'问题排查步骤通过查看K8Spod的监......