1、某分行部署的某台服务器内存占用过高,导致死机; 2、代码层面检查暂未发现问题,服务器硬重启持续一段时间后(3-5天)再次占满。
本文介绍linux内存机制、虚拟内存swap、buffer/cache释放等原理及实操。
大家好,今天跟大家就CPU、磁盘、网络及内存方面的问题,聊聊如何排查和调优。 CPU过高,怎么排查问题 linux内存 磁盘IO 网络IO java 应用内存泄漏和频繁 GC java 线程问题排查 常用 jvm 启动参数调优 linux CPU 过高,怎么排查问题
Linux内存清理:绝大多数情况下都不需要此操作,因为cache的内存在需要的时候是可以自动释放的~
常用 free free -k # 以KB为单位 free -m # 以MB为单位 free -g # 以GB为单位 free -h # 人类可读 输出 total used free shared buffers cached Mem 3856200 3321044 535156 251096 232084 1406376 -/+ buffers/cache 1682584 2173616 Swap 3999740 482480 3517260 total
理解硬件访问内存的原理,MMU和页表;澄清Linux内核ZONE,buddy,slab管理;澄清用户空间malloc与内核关系,Lazy分配机制;澄清进程的内存消耗的vss,rss,pss,uss概念;澄清内存耗尽的OOM行为;澄清文件背景页面与匿名页,page cache与swap;澄清内存的回收、dirty page的写回,以及一些内存管理/proc/sys/vm sysctl配置的幕后原理;DMA和cache一致性,IOMMU等;给出一些内存相关的调试和优化方法;消除网上各种免费资料的各种误解。
对于精通 CURD 的业务同学,内存管理好像离我们很远,但这个知识点虽然冷门(估计很多人学完根本就没机会用上)但绝对是基础中的基础。
我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。 物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(Swap Space)。 作为物理内存的扩展,linux会在物理内存不足时,使用交换分区的虚拟内存,更详细的说,就是内核会将暂时不用的内存块信息写到交换空间,这样以来,物理内存得到了释放,这块内存就可以用于其它目的,当需要用到原始的内容时,这些信息会被重新从交换空间读入物理内存。 Linux的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会在适当的时候将物理内存中不经常使用的数据块自动交换到虚拟内存中,而将经常使用的信息保留到物理内存。
我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。
线上集群后端某台Web服务器例行检查时,我观察到+buffers/cache值(即Linux内存的实际使用情况)一直都是5365左右,就算停掉Nginx+FastCGI程序和其它程序也是一样,考虑到这台机器经常在使用rsync+inotify,肯定会存在着频繁存取文件的情况。而Linux系统有一个特性:在Linux下频繁存取文件时,就会占用物理内存。当程序结束时并不会自动释放被占用的内存,而是一直作为Cache存在。实际上内核结束一个程序后,它是会释放内存的,但是内核并没有立刻将这部分收集到free当中,而是存在在cached或者buffer当中,提高系统的io效率,cache和buffered的内存是由内核进行动态的配置管理,如果系统的free大小不够的时候,系统会自动释放cache buffer的内存给程序使用(因此如果是看到used很多,来手动释放内存其实是不需要的,我前面的文章及书籍其实也说明了我们应该如何观察Linux系统的实际内存使用情况,这里就不再多描述了)。
Linux上创建进程据说消耗很少,这个一直是Linux的特点,于是就专门测试Linux创建进程的极限,测试代码如下:
Linux服务器运行一段时间后,由于其内存管理机制,会将暂时不用的内存转为buff/cache,这样在程序使用到这一部分数据时,能够很快的取出,从而提高系统的运行效率,所以这也正是Linux内存管理中非常出色的一点,所以乍一看内存剩余的非常少,但是在程序真正需要内存空间时,Linux会将缓存让出给程序使用,这样达到对内存的最充分利用,所以真正剩余的内存是free+buff/cache
Lazy Load是一个用Javascript写得jQuery插件。它可以使一个长网页中,不在当前视图中的图片延迟加载,以提高页面的载入速度。
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。
linux内存管理卷帙浩繁,本文只能层层递进地带你领略冰山轮廓,通过本文你将了解到以下内容:
Linux操作系统(包括Android)之所以可以运行丰富的应用程序,是因为背后有着内存管理和进程调度的支撑,个人觉得这两点也是所有OS的精华。掌握内存管理和进程调度对以后站在全局的角度去分析调试问题很有帮助。
操作系统堪称是IT皇冠上的明珠,Linux阅码场专注Linux操作系统内核研究, 它的文章云集了国内众多知名企业一线工程师的心得,畅销著作有《linux设备驱动开发详解 》等。
在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约 600m,Linux自身使用大约800m。
本文为IBM RedBook的Linux Performanceand Tuning Guidelines的1.2节的翻译 原文地址:http://www.redbooks.ibm.com/redpapers/pdfs/redp4285.pdf 原文作者:Eduardo Ciliendo, Takechika Kunimasa, Byron Braswell 1.2 Linux内存架构 为了执行一个进程,Linux内核为请求的进程分配一部分内存区域。该进程使用该内存区域作为其工作区并执行请求的工作。它与你的
swap空间有两种形式:一是交换分区,二是交换文件。总之对它的读写都是磁盘操作。 linux内存通过 virtual memory 虚拟内存来管理整个内存, 虚拟内存管理着物理内存,也管理着swap交换空间。 Swap分区,即交换区,Swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到
以交友平台用户中心的user表为例,单表数据规模达到千万级别时,你可能会发现使用用户筛选功能查询用户变得非常非常慢,明明查询命中了索引,但是,部分查询还是很慢,这时候,我们就需要考虑拆分这张user表了。
这个内存问题是初代 pkexec 引入的,2009年,至今已有12年之久。linux内存安全之雷,不知道有多少。
在linux系统环境的测试开发过程中,我们常常需要评估系统性能,尤其在性能测试工作中,我们需要通过系统资源的监控,从而分析定位系统的性能瓶颈。
先从swap产生的原理来分析,由于linux内存管理比较复杂,下面以问答的方式列了一些重要的点,方便大家理解:
在Linux系统中,内存管理是一个至关重要的环节。为了更好地监控和管理系统内存,Linux提供了多种工具和命令。其中,lsmem命令就是一个非常有用的工具,它可以显示系统的内存布局和大小。本文将详细介绍lsmem命令的用途、工作原理、主要特点、实际应用示例以及使用时的注意事项和最佳实践。
首先Binder是Android中的一种独有的跨进程通信方式,简称IPC。它是专门为Android平台设计的。
在Linux系统中,我们经常用free命令来查看系统内存的使用状态。在一个RHEL6的系统上,free命令的显示内容大概是这样一个状态:
在 Linux 系统(比如 CentOS/RadHat、Debian/Ubuntu)上配置 lnmp环境,通过探针查看物理内存使用率:
Linux长时间使用会导致cache缓存占用过大,甚至拖累CPU的使用率,可以通过命令手动释放Linux内存,详细教程如下:
保持更新,转载请注明出处:https://www.cnblogs.com/xuyaowen/p/ramfs-tmpfs-test.html
看了很多关于linux内存管理的文章还是云里雾里,听了很多关于linux内存管理的课程还是一头雾水。其实很多时候造成不懂的原因不是资料太少,恰恰是资料太多,而且各个内核版本的差异,32位64位的不同,文章的胡编乱造等都给读者带来疑惑。本着对内存深度剖析的态度,希望以版本kernel-4.14,架构AARCH64为专题做个内存管理的架构性整理。
Docker长期运行导致Linux内存buff/caches占用过高,这个问题很常见,但是我们是无法控制Docker自己对pagecache的处理机制的。
Linux下的vmstat(英文全称:Virtual Meomory Statistics),虚拟内存统计的缩写,可对操作系统的虚拟内存、进程、CPU活动、I/O等系统整体运行状态进行监控。
2 在aof重写期间,不要对aof进行追加:no-appendfsync-on-rewrite=yes
本文提供了一种轻巧的内存泄漏测试方法及其python实现,该方法在Lenovo Bamboo系统的验收测试活动中得到过诸多检验,是一种易用有效的内存泄漏测试方法。
关于Dismember Dismember是一款针对Linux内存安全的测试与扫描工具,该工具本质上是一个基于命令行的工具,专为Linux操作系统而设计,可以帮助广大研究人员扫描Linux系统上的所有进程,并尝试从中搜索常见的敏感信息或自定义的正则表达式匹配项。 该工具基于Go语言开发,目前仍在积极开发阶段,之后可能会升级为一个完整的渗透测试工具。 工具要求 该工具基于Go语言开发,因此我们首先需要在本地设备上安装并配置好Go语言环境。接下来,广大研究人员可以使用下列命令将该项目源码克隆至本地:
前言: 前文《内存映射技术分析》描述了虚拟内存的管理、内存映射;《物理内存管理》介绍了物理内存管理。 本篇介绍一下内存回收。内存回收应该是整个Linux的内存管理上最难理解的部分了。 分析: 1,PFRA Page Frame Reclaim Algorithm,Linux的内存回收算法。 不过,PFRA和常规的算法不同。比如说冒泡排序或者快速排序具有固定的时间复杂度和空间复杂度,代码怎么写都差不多。而PFRA则不然,它不是一个具体的算法,而是一个策略---什么样的情况下需要做内存回收,什么样的page
内存的管理和优化是系统性能优化的一个重要部分,内存资源的充足与否直接影响应用系统的使用性能。在进行内存优化之前,一定要熟悉Linux的内存管理机制,这里我们重点探讨如何通过系统命令监控Linux系统的内存使用状况。
这本书是个人看过的讲操作系统底层里面讲的最通俗易懂的了,但是200多页的内容确实讲不了多深的内容,所以不要对这本书抱有过高期待,当一个入门书了解即可。
本文实例为大家分享了Linux内存泄漏检测的shell脚本,供大家参考,具体内容如下
查看系统负载 常用命令,其中1表示1秒刷新一次,-S表示单位,M表示MB vmstat 1 -S M
Postgresql启动后申请两段内存,在启动时会判断系统支持情况,默认是使用mmap申请共享内存。
在学习Oracle内存结构的时候,发现一个问题:我的虚拟机Oracle环境参数文件中设置的sga_target=960M,但是在启动数据库时候,显示分配的Total System Global Area为1002127360 bytes(955.7M),那么问题就来了,为什么会不一致?相差的4.3M去干什么了?
查看主板的序列号: dmidecode | grep -i ’serial number’
6.音频:音频体系结构ALSA.支持USB音频和MIDI设备,并支持全双工重放功能。
内核文档Documentation/arm64/memory.rst描述了ARM64 Linux内核空间的内存映射情况,应该是此方面最权威文档。
领取专属 10元无门槛券
手把手带您无忧上云