解决Linux交换空间不足问题的方法 (linux 交换空间不足)

Linux是一个非常流行的开源操作系统,得到了世界范围内许多用户的青睐。然而,与任何其他操作系统一样,Linux也需要交换空间来帮助它管理内存并保证系统运行的稳定性。当Linux交换空间开始不足时,系统的性能和稳定性都会受到影响。本文将介绍如何。

1. 检查交换空间使用情况

你需要检查交换空间的使用情况。你可以通过运行以下命令来检查当前交换空间的使用情况:

“`

$ swapon -s

“`

输出的结果将告诉你哪个分区或文件被用作交换空间,以及它们的大小和使用情况。

如果交换空间的使用率比较高,你可能需要增加交换空间的大小或添加新的交换分区或文件。

2. 增加交换空间的大小

Linux交换空间可以分为分区和文件两种类型。你可以使用以下步骤来增加交换空间的大小。

2.1 分区方式

你需要创建一个分区。这可以通过使用fdisk或其他分区工具来完成。你可以运行以下命令来查看当前的分区情况:

“`

$ sudo fdisk -l

“`

确定增加交换空间的分区。例如,如果/dev/sda1是你想要增加交换空间的分区,则运行以下命令:

“`

$ sudo fdisk /dev/sda

“`

在fdisk命令行界面中,依次输入以下命令:

1. 输入 n ,创建一个新的分区。

2. 选择分区类型。在这里,你想选择一个Linux Swap分区。

3. 输入分区的大小。你可以根据自己的需要选择一个大小。

4. 输入 w 将更改写入磁盘并退出。

接下来,你需要格式化新创建的分区。例如,如果你创建了/dev/sda2作为新的交换分区,则可以运行以下命令来格式化:

“`

$ sudo mkswap /dev/sda2

“`

你需要将新创建的交换分区添加到系统中。你可以使用以下命令来将交换分区添加到系统:

“`

$ sudo swapon /dev/sda2

“`

运行swapon -s命令来验证交换分区已成功添加到系统中。

2.2 文件方式

你也可以使用文件来创建交换空间。你需要创建一个空文件,可以使用以下命令来创建:

“`

$ sudo fallocate -l 4G /swapfile

“`

其中,-l后的参数表示文件的大小,例如4G表示4GB。

然后,你需要将这个文件转换成交换分区,可以使用以下命令来完成:

“`

$ sudo mkswap /swapfile

“`

你需要将文件交换加入到系统中,可以使用以下命令:

“`

$ sudo swapon /swapfile

“`

运行swapon -s命令来验证交换文件已成功添加到系统中。

3. 合理设置交换空间的大小

除了增加交换空间的大小以外,还有一个解决方法应该被考虑,那就是合理设置交换空间的大小。在安装Linux时,你应该在安装向导的分区和磁盘设置中设置交换分区的大小。

一般来说,实际内存的两倍是一个相对合理的交换空间大小。如前所述,你可以通过swapon -s命令来检查当前使用的交换空间大小。如果当前交换空间的使用率高于80%,则可能需要增加交换空间的大小或添加更多的交换分区或文件。

4. 关闭或禁用某些进程或服务

最后一个解决方法是尝试关闭或禁用一些进程或服务,这些进程或服务会占用大量的内存和交换空间。例如,你可以关闭虚拟机或冗余服务来释放一些内存和交换空间。

在Linux中,交换空间对于系统的性能和稳定性至关重要。当交换空间不足时,系统的性能和响应速度都将受到影响。因此,你需要确保你的系统有足够的交换空间,并且你需要定期检查交换空间的使用情况。如果你的交换空间不足,你可以增加交换分区或文件的大小,或禁用一些进程或服务来释放内存和交换空间。

相关问题拓展阅读:

给Linux分配多少Swap空间才够呢?

Swap交换大小应该是多少?交换应该是RAM大小的两倍还是RAM大小的一半?如果我的系统有几GB的RAM,我是否需要交换?

也许这些是关于在安孝斗装Linux时选择交换大小的最常见问题。

这不是什么新鲜事。交换大小一直存在很多混乱。

很长一段时间,推荐的交换大小是RAM大小的两倍,但这条黄金法则不再适用于现代计算机。

我们的系统RAM大小高达128 GB,许多旧计算机甚至没有这么多的硬盘。但是你会分配到具有32 GB RAM的系统的交换大小? 64GB?那将是一个荒谬的硬盘浪费,不是吗?

在了解需要分配Swap空间应该分配多大之前,让我们先快速了解交换内存的一两件事。

这些有助于让每个人真正理解为什么Linux需要Swap交换空间。

我们都知道计算机系统在运行的时候会使用到RAM(Random Access Memory),当只有少数应用程序在运行时,系统会使用可用的RAM进行管理。

但是如果有很多很多的程序在运行,那么就需要非常大容量RAM,这时候计算机RAM不够,应用程序就会崩溃。

当RAM耗尽时,Swap交换空间会被系统使用。当RAM耗尽时,Linux系统使用部分硬盘内存并将其分配给正在运行的应用程序。

这听起来非常不错,这意味着如果我们如果分配50GBSwap交换空间,系统或许可以同时运行成百上千的应用程序?是这样么?大错特错!!!

你知道的,程序运行速度十分重要;

RAM访问数据的大小为纳秒级;

SSD访问数据(以微秒为单位),而普通硬盘以毫秒为单位访问数据;

这意味着RAM比SSD快1000倍,比普通HDD快100,000倍。

如果应用程序过分依赖Swap交换空间,则其伏陵性能将下降,因为它无法以与RAM中相同的速度访问数据。

因此,完成相同任务可能需要几分钟才能完成任务,而不需要花费1秒钟完成任务。这将使应用程序几乎无用。这被称为计算术语中的颠簸。

Swap交换空间只是用来应急的,所以它的分配要适量。

以下是需要交换空间Swap的几个原因

如果你的RAM有32GB或者64GB,你的系统可能永远都不会使用到这么多的交换分区。

我猜测缺慎戚,如果你的系统有32GB的RAM,它或许至少有100GB的硬盘。

分配几GB的交换空间应该也无关痛痒,如果错误的程序开始滥用RAM,它将提供额外的“稳定性”。

现在回到这个更大的问题上,应该给Linux分配多少Swap空间才够。

答案是没有一个确切的答案,不过倒是有一些建议,不同的人根据自己的实际情况分配交换空间的大小。

如果根据Red Hat的建议,他们建议是分配RAM 20%的换空间,也就是RAM是8GB,分配1.6GB交换空间。

CentOS建议

Ubuntu考虑到系统需要休眠,

Ubuntu建议的Swap分配表

事实上没有一个真正确定的Swap交换空间分配大小,根据实际情况来吧,如果你不在乎多点交换空间,可以使用两倍于RAM的这种方案。

你更倾向于使用哪种方案呢?

如何清除linux的内存缓存,缓冲和交换空间

在以前内存比较紧张的时候建议的是

swap为内存空间的两倍,不过现在内存差不多够大了,不唯颤羡知道你主要用来做什么,要是使用的时候2g内存空间不够用的话建议给swap分配大概2倍于内存的空间,要是不足2g的话就别分了,我之前用的时候内存占用达指拍到洞敬了90%,但是swap却是0。。。

Linux内存机制(swap)

我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。

物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(Swap Space)。

作为物理内存的扩展,linux会在物理内存不足时,使用交换分区的虚拟内存,更详细的说,就是内核会将暂时不用的内存块信息写到交换空间,这样以来,物理内存得到了释放,这块内存就可以用于其它目的,当需要用到原始的内容时,这些信息会被重新从交换空间读入物理内存。

Linux的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会在适当的时候将物理内存中不经常使用的数据块自动交换到虚拟内存中,而将凯巧型经常使用的信息保留到物理内存。

要深入了解linux内存运行机制,需要知道下面提到的几个方面:

Linux系统会不时的进行页面交换操作,以保持尽可能多的空闲物理内存,即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面。这可以避免等待交换所需的时间。

Linux 进行页面交换是有条件的,不是所有页面在不用时都交换到虚拟内存,linux内核根据”最近最经常使用“算法,仅仅将一些不经常使用的页面文件交换到虚拟 内存,有时我们会看到这么一个现象:linux物理内存还有很多,但是交换空间也使用了很多。其实,这并不奇怪,例如,一个占用很大内存的进程运行时,需 要耗费很多内存资源,此时就会有一些不常用页面文件被交换到虚拟内存中,但后来这个占用很多内存资源的进程结束并释放了很多内存时,刚才被交换出去的页面 文件并不会自动的交换进物理内存,除非有这个必要,那么此刻系统物理内存就会空闲很多,同时交换空间也在被使用,就出现了刚才所说的现象了。关于这点,不 用担心什么,只要知道是怎么一回事就可以了。

交换空间的页面在使用时会首先被交换到物理内存,如果此时没有足够的物理内存来容纳这些页 面,它们又会被马上交换出去,如此以来,虚拟内存中可能没有足够空间来存储这些交换页面,最终会导致linux出现假死机、服务异常等问题,linux虽 然可以在一段时间盯猜内自行恢复,但是恢复后的系统已经基本不可用了。

因此,合理规划和设计Linux内存的使用,是非常重要的.

在Linux 操作系统中,当应用程序需要读取文件中的数据时,操作系统先分配一些内存,将数据从磁盘读入到这些内存中,然后再将数据分发给应用程序;当需要往文件中写 数据时,操作系统先分配内存接收用户数据,然后再将数据从内存写到磁盘上。然而,如果有大量数据需要从磁盘读取到内存或者由内存写入磁盘时,系统的读写性 能就变得非常低下,因为无论是从磁盘读数据,还是写数据到磁盘,都是一个很消耗时间和资源的过程,在这种宽中情况下,Linux引入了buffers和 cached机制。

buffers与cached都是内存操作,用来保存系统曾经打开过的文件以及文件属性信息,这样当操作系统需要读取某些文件时,会首先在buffers 与cached内存区查找,如果找到,直接读出传送给应用程序,如果没有找到需要数据,才从磁盘读取,这就是操作系统的缓存机制,通过缓存,大大提高了操 作系统的性能。但buffers与cached缓冲的内容却是不同的。

buffers是用来缓冲块设备做的,它只记录文件系统的元数据(metadata)以及 tracking in-flight pages,而cached是用来给文件做缓冲。更通俗一点说:buffers主要用来存放目录里面有什么内容,文件的属性以及权限等等。而cached直接用来记忆我们打开过的文件和程序。

为了验证我们的结论是否正确,可以通过vi打开一个非常大的文件,看看cached的变化,然后再次vi这个文件,感觉一下两次打开的速度有何异同,是不是第二次打开的速度明显快于之一次呢?接着执行下面的命令:

find / -name .conf 看看buffers的值是否变化,然后重复执行find命令,看看两次显示速度有何不同。

上面这个60代表物理内存在使用40%的时候才会使用swap(参考网络资料:当剩余物理内存低于40%(40=100-60)时,开始使用交换空间) swappiness=0的时候表示更大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。

值越大表示越倾向于使用swap。可以设为0,这样做并不会禁止对swap的使用,只是更大限度地降低了使用swap的可能性。

通常情况下:swap分区设置建议是内存的两倍 (内存小于等于4G时),如果内存大于4G,swap只要比内存大就行。另外尽量的将swappiness调低,这样系统的性能会更好。

B.

修改swappiness参数

永久性修改:

立即生效,重启也可以生效。

一般系统是不会自动释放内存的 关键的配置文件/proc/sys/vm/drop_caches。这个文件中记录了缓存释放的参数,默认值为0,也就是不释放缓存。他的值可以为0~3之间的任意数字,代表着不同的含义:

0 – 不释放 1 – 释放页缓存 2 – 释放dentries和inodes 3 – 释放所有缓存

前提:首先要保证内存剩余要大于等于swap使用量,否则会宕机!根据内存机制,swap分区一旦释放,所有存放在swap分区的文件都会转存到物理内存上。通常通过重新挂载swap分区完成释放swap。

a.查看当前swap分区挂载在哪?b.关停这个分区 c.查看状态:d.查看swap分区是否关停,最下面一行显示全 e.将swap挂载到/dev/sda5上 f.查看挂载是否成功

关于linux 交换空间不足的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 解决Linux交换空间不足问题的方法 (linux 交换空间不足)