
Linux 操作系统 内存管理
文章平均质量分 88
vww
富士康质检员张全蛋
人生实难,唯有自渡。只有接受了真实现的现状和真实的自己,调整好心态,才能脚踏实地的活着,然后去发现角落处的那些惊喜和美好,去相信一切苦难困境都会过去!“即使身处阴沟,也要记得仰望星空”。
展开
-
Linux 查看占用内存 前10的命令
Linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合:Linux下获取占用内存资源最多的10个进程,可以使用如下命令组合:命令组合解析(针对CPU的,MEN也同样道理):拍摄aux|head-1;拍摄aux|grep-vPID|sort-让你-看+3|head该命令组合实际上是下面两句命令:Linux中ps命令是Process的缩写。ps命令用来列出系统中当前运行的那些进程。原创 2024-04-11 09:09:24 · 1476 阅读 · 1 评论 -
Linux page cache与buffer cache优化
作为通用优化设置,建议将vm.dirty_background_ratio设置为5%,vm.dirty_ratio设置为10%。(参考值,设置为这两个值效果还是不错的)当写入只是将数据暂时存入pagecache,并且置为dirty标志,写入pagecache的数据会被定期,批量的保存在文件系统上面,这样就减少了对磁盘的操作次数,减少系统的开销。当发生一个读操作,首先去pagecache里面去找,找到了就直接返回了,没有找到就去磁盘读取文件,然后再写入这个pagecache,然后再读取,最终返回需要的数据。.原创 2022-07-19 11:38:22 · 1027 阅读 · 0 评论 -
Linux buffer/cache解读
cache出现的原因与功能 计算机硬件中CPU、内存、磁盘是最主要的三大部分,其中,CPU发展到今天,执行速度最快,而内存相对CPU而言,就慢多了,CPU执行的指令是从内存取出的,计算的结果也要写回内存,但内存的响应速度如果跟不上CPU的话,CPU只能无所事事的等待了。这样一来,再快的CPU也发挥不了效率。同理,内存中的数据也要回写到磁盘的,相对于机械硬盘HDD,内存的速度可快多了。这就又出现了问题,磁盘的低速读写速度,相比内存条的二进制电压变化速度,那就是蒸汽机和火箭速度的差别。这样巨大差异,即使内存读写原创 2022-07-19 11:19:44 · 2522 阅读 · 1 评论 -
linux 内存性能评估工具 free/smem
内存监控命令free free命令输出中显示了系统的各种内存状态,具体包括物理内存和swap,物理内存中又分为已使用内存(used)、空闲内存(free)、共享内存(shared)、系统缓存(buff/cache)和目前可用内存(available)。 看下面一个输出:(它只能显示某一时刻的内存状态,不能做到实时的去显示)在Mem这行的输出中,其实是有个等式关系的: Used+free+buff/cache=total avaliable=buff/cache - shared,别看占用很多,当物理内存原创 2022-07-10 10:31:34 · 1312 阅读 · 0 评论 -
Linux 内存管理 页回收和swap机制
页是物理内存或虚拟内存中一组连续的线性地址,Linux内核以页为单位处理内存,页的大小通常是4KB。当一个进程请求一定量的页面时,如果有可用的页面,内核会直接把这些页面分配给这个进程,否则,内核会从其它进程或者页缓存中拿来一部分给这个进程用。内核知道有多少页可用,也知道它们的位置。如果在进程请求指定的内存页时,没有可用的内存页,那么这个时候内核就会去尝试释放特定的内存页给新的请求去使用,这个过程就叫做内存回收。其中有个进程叫做kswap内核线程,它就是负责页面的回收的。kswapd内核线程负责页面回收。它是原创 2022-07-06 11:20:50 · 1598 阅读 · 0 评论 -
Linux 物理内存、虚拟内存
物理内存和虚拟内存电脑里内存分内存条(这里我们叫物理内存)和硬盘,内存条保存程序运行时数据,也称为物理内存,硬盘持久保存数据。在进程的执行过程当中,Linux会根据内核需要,分配一片内存区域,进程会将这片区域当成工作区。然后按照要求去执行这些操作。那么虚拟内存是什么?程序运行会启动一个进程,进程里有程序段、全局数据、栈和堆,这些都会加载到内存里,每一部分都有对应的内存地址,进程就是一直在处理这些地址中数据。然而在Linux下,进程不能直接读写物理内存地址(它不能直接读取内存条对应的地址)。进程中能访问的地址原创 2022-07-03 16:38:02 · 1029 阅读 · 0 评论 -
Linux 运维 内存监控与设置
我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(Swap Space)。作为物理内存的扩展,linux会在物理内存不足时,使用交换分区的虚拟内存,更详细的说,就是内核会将原创 2022-06-20 22:39:03 · 669 阅读 · 0 评论 -
Linux 为什么系统的Swap变高了?(下)
在内存资源紧张时,Linux 通过直接内存回收和定期扫描的方式,来释放文件页和匿名页,以便把内存分配给更需要的进程使用。文件页的回收比较容易理解,直接清空缓存,或者把脏数据写回磁盘后,再释放缓存就可以了。 而对不常访问的匿名页,则需要通过 Swap 换出到磁盘中,这样在下次访问的时候,再次从磁盘换入到内存中就可以了。开启 Swap 后,你可以设置 /proc/sys/vm/min_free_kbytes ,来调整系统定期回收内存的阈值,也可以设置 /proc/sys/vm/swappiness ,来转载 2022-02-21 21:47:20 · 857 阅读 · 0 评论 -
Linux 内存机制以及手动释放 swap 和 buffer 和 cache
本文介绍linux内存机制、虚拟内存swap、buffer/cache释放等原理及实操。 一、什么是linux的内存机制? 二、linux什么时候开始使用虚拟内存(swap)? 三、怎么释放内存? 四、怎么释放swap? 一、什么是linux的内存机制?我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。物理内存就是系统硬件提供的内存大小,...转载 2021-12-25 17:07:17 · 1889 阅读 · 0 评论 -
Linux 内存页表管理 浅析
Linux四级页表及其原理 - 简书title: Linux-Arm page tabledate: 2019-11-26 16:44:04description: linux四级页表及其原理 一.多级页表的概...https://www.jianshu.com/p/242ba363e4ed一.多级页表的概念 介绍页表之前,我们先来回顾一个操作系统里的基本概念,虚拟内存。1.1 虚拟内存 在用户的视角里,每个进程都有自己独立的地址空间,A进程的4GB和B进程4GB是完全独立不相关的,他们转载 2021-12-15 19:39:12 · 813 阅读 · 0 评论 -
内存一些小笔记
1.查看某个容器状态,查看是什么原因退出[root@docker ~]# docker inspect a6fb3d53a55b | grep -i status -A 10 "Status": "exited", "Running": false, "Paused": false, "Restarting": false, "OOMKilled": true,原创 2021-11-21 15:32:16 · 1951 阅读 · 0 评论 -
Swap:容器可以使用Swap空间吗?
用过 Linux 的同学应该都很熟悉 Swap 空间了,简单来说它就是就是一块磁盘空间。当内存写满的时候,就可以把内存中不常用的数据暂时写到这个 Swap 空间上。这样一来,内存空间就可以释放出来,用来满足新的内存申请的需求。它的好处是可以应对一些瞬时突发的内存增大需求,不至于因为内存一时不够而触发 OOM Killer,导致进程被杀死。那么对于一个容器,特别是容器被设置了 Memory Cgroup 之后,它还可以使用 Swap 空间吗?会不会出现什么问题呢?问题再现接下来,我们就转载 2021-11-03 16:52:26 · 1273 阅读 · 0 评论 -
Page Cache:为什么我的容器内存使用量总是在临界点?
Memory Cgroup 是如何控制一个容器的内存的。我们已经知道了,如果容器使用的物理内存超过了 Memory Cgroup 里的 memory.limit_in_bytes 值,那么容器中的进程会被 OOM Killer 杀死。不过在一些容器的使用场景中,比如容器里的应用有很多文件读写,你会发现整个容器的内存使用量已经很接近 Memory Cgroup 的上限值了,但是在容器中我们接着再申请内存,还是可以申请出来,并且没有发生 OOM。这是怎么回事呢?问题再现我们可以用这里的代码.转载 2021-10-28 20:32:17 · 2649 阅读 · 1 评论 -
Docker 容器内存:我的容器为什么被杀了?
不知道你在使用容器时,有没有过这样的经历?一个容器在系统中运行一段时间后,突然消失了,看看自己程序的 log 文件,也没发现什么错误,不像是自己程序 Crash,但是容器就是消失了。那么这是怎么回事呢?接下来我们就一起来“破案”。问题再现容器在系统中被杀掉,其实只有一种情况,那就是容器中的进程使用了太多的内存。具体来说,就是容器里所有进程使用的内存量,超过了容器所在 Memory Cgroup 里的内存限制。这时 Linux 系统就会主动杀死容器中的一个进程,往往这会导致整个容器的退出...转载 2021-09-27 15:25:02 · 9226 阅读 · 0 评论 -
Linux 为什么系统的Swap变高了(上)
上一节,我通过一个斐波那契数列的案例,带你学习了内存泄漏的分析。如果在程序中直接或间接地分配了动态内存,你一定要记得释放掉它们,否则就会导致内存泄漏,严重时甚至会耗尽系统内存。不过,反过来讲,当发生了内存泄漏时,或者运行了大内存的应用程序,导致系统的内存资源紧张时,系统又会如何应对呢?在内存基础篇我们已经学过,这其实会导致两种可能结果,内存回收和 OOM 杀死进程。我们先来看后一个可能结果,内存资源紧张导致的 OOM(Out Of Memory),相对容易理解,指的是系统杀死占用大量内存的进程.转载 2020-09-09 12:02:07 · 1035 阅读 · 0 评论 -
Linux 内存泄漏了,我该如何定位和处理?
对普通进程来说,能看到的其实是内核提供的虚拟内存,这些虚拟内存还需要通过页表,由系统映射为物理内存。当进程通过 malloc0申请虚拟内存后,系统并不会立即为其分配物理内存,而是在首次访问时, 才通过缺页异常陷入内核中分配内存。为了协调 CPU与磁盘间的性能差异,Linux 还会使用Cache和Buffer,分别把文件和磁盘读写的数据缓存到内存中。对应用程序来说,动态内存的分配和回收,是既核心又复杂的一个逻辑功能模块。管理内存的过程中,也很容易发生各种各样的"事故",比如● 没正确回收分配.转载 2020-08-28 20:25:59 · 2171 阅读 · 0 评论 -
Linux 理解系统缓存提高程序运行效率
内存性能中 Buffer和Cache的概念Buffer和Cache的设计目的,是为了提升系统的I/O性能。它们利用内存,充当起慢速磁盘与快速CPU之间的桥梁,可以加速 I/O的访问速度。Buffer和Cache 分别缓存的是对磁盘和文件系统的读写数据。●从写的角度来说,不仅可以优化磁盘和文件的写入,对应用程序也有好处,应用程序可以在数据真正落盘前,就返回去做其他工作。●从读的角度来说,不仅可以提高那些频繁访问数据的读取速度,也降低了频繁I/O对磁盘的压力。既然Buffer和Cache .转载 2020-08-26 11:09:53 · 1336 阅读 · 0 评论 -
Linux 一文详解缓冲区buffer和缓存cache
内存和CPU的关系非常紧密,而内存管理本身也是很复杂的机制,所以感觉知识很硬核、很难啃,都是正常的。但还是那句话,初学时不用非得理解所有内容,继续往后学,多理解相关的概念并配合一定的实践之后,再回头复习往往会容易不少。当然,基本功不容放弃。先来回顾一下系统的内存使用情况,比如下面这个 free输出界面∶[root@localhost ~]# free total used free shared buff/cache availa转载 2020-08-17 10:30:05 · 5078 阅读 · 0 评论 -
Linux 内存是如何工作的
同CPU管理一样,内存管理也是操作系统最核心的功能之一。内存主要用来存储系统和应用程序的指令、数据、缓存等。那么,Linux 到底是怎么管理内存的呢?今天,我就来带你一起来看看这个问题。内存映射说到内存,你能说出你现在用的这台计算机内存有多大吗?我估计你记得很清楚,因为这是我们购买时,首先考虑的一个重要参数,比方说,我的笔记本电脑内存就是8GB的。我们通常所说的内存容量,就像我刚刚提到的8GB,其实指的是物理内存。物理内存也称为主存,大多数计算机用的主存都是动态随机访问内存(DRAM).转载 2020-08-07 11:58:42 · 1009 阅读 · 1 评论 -
Redis 优化之内存分配控制 vm.overcommit_memory
vm.overcommit_memoryRedis在启动时可能会出现这样的日志:WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl ...原创 2020-06-29 20:43:18 · 10220 阅读 · 2 评论