Notice:这里我们默认以Linux JAVA8 hotspot环境为例,其Oracle官网Java Platform, Standard Edition Tools Reference(这里面有详细参数配置说明)。
一、磁盘 1、告警:Disk read/write request responses are too high 表达式解释为: 最近15分钟的对应磁盘的Disk read request avg waiting time (r_await)大于20ms或者 Disk write request avg waiting time (w_await) 大于20ms
很多程序员熟悉了在 Windows 环境下开发,而我们服务器一般都是 Linux 系统。当有一天你需要在 Linux 服务器上做一些配置或者故障排除的时候,你会很困惑,不知道如何下手。原因是对 Linux 常用的命令还不熟悉,今天我就给大家介绍几个 Linux 常用命令。掌握它们的用法后,我们在使用 CRMEB 打通版系统的时候就能如鱼得水,可以大大提高工作效率。
Exception in thread "Timer-1" java.lang.OutOfMemoryError: PermGen space
服务器上部署了Java服务,出现了OutOfMemoryError,问题应该如何定位? 解决思路 Java服务OOM,最常见的原因为: 有可能是内存分配确实过小,而正常业务使用了大量内存 某一个对象
前文我们没有提到,如何限制元空间的大小,其实就是限制 commit 的内存大小。元空间的限制不只是受限于我们的参数配置,并且前面我们提到了,元空间的内存回收也比较特殊,元空间的内存基本都是每个类加载器的 ClassLoaderData 申请并管理的,在类加载器被 GC 回收后,ClassLoaderData 管理的这些元空间也会被回收掉。所以,GC 是可能触发一部分元空间被回收了。所以元空间在设计的时候,还有一个动态限制 _capacity_until_GC,即触发 GC 的元空间占用大小。当要分配的空间导致元空间整体占用超过这个限制的时候,尝试触发 GC。这个动态限制也会在每次 GC 的时候动态扩大或者缩小。动态扩大以及缩小
问题背景:一次启动本地应用,两分钟过后自动退出,通过日志并未发现任何异常状况,莫名其妙的应用就自动被杀掉了;
可以看到使用不同的参数会将内存占用情况以不同的形式呈现出来,其中各个数字的意义如下: total: 物理内存的大小,就是机器实际的内存大小; used: 已使用的内存大小,这个值包括了cache和应用程序实际使用的内存; free: 尚未被使用的内存大小; shared: 共享内存的大小; buff/cache: 被缓冲区和缓存占用的内存大小; available: 该项是新版的free中增加的一项,表示可用内存大小。
通过获取Linux中的 /proc/stat 文件中的内容可以获取系统内存的详细信息:
/proc/279/status是一个Linux内核中的文件,其中包含了当前进程的状态信息。每行的含义如下:
本文主要分析 Linux 系统内存统计的一些指标以及进程角度内存使用监控的一些方法。
以交友平台用户中心的user表为例,单表数据规模达到千万级别时,你可能会发现使用用户筛选功能查询用户变得非常非常慢,明明查询命中了索引,但是,部分查询还是很慢,这时候,我们就需要考虑拆分这张user表了。
设计的目的就是当上面提到的+buffers/cache表示的可用内存都已使用完,新的读写请求过来后,会把内存中的部分数据写入磁盘,从而把磁盘的部分空间当做虚拟内存来使用。
oom_adj 值是 Linux 内核为每个进程分配的 , 该值可以反映进程的优先级 ;
这个文件记录着比较详细的内存配置信息,使用 cat /proc/meminfo 查看。
查看系统负载 常用命令,其中1表示1秒刷新一次,-S表示单位,M表示MB vmstat 1 -S M
free命令用于显示系统内存使用情况,包括物理内存(Physical Memory)、虚拟内存(Swap Memory)、共享内存(Shared Memory)以及内核使用的缓冲(Buffers)与缓存(Cached)大小。在Linux系统监控的工具中,free命令是最经常使用的命令之一。
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。
在Linux系统中,可以使用多个命令来获取系统版本信息、CPU型号、核心数和内存大小。以下是一些常用的命令:
文章目录 一、查看 x86_64 架构体系内存分布 二、/proc/meminfo 重要字段解析 一、查看 x86_64 架构体系内存分布 ---- 执行 cat /proc/meminfo 命令 , 可以查看 " x86_64 架构体系内存分布 " ; 执行结果参考 : root@ubuntu:~/kernel/linux-5.6.14# cat /proc/meminfo MemTotal: 4001788 kB MemFree: 2312852 kB MemAvaila
前面提到了虚拟内存需要映射物理内存才能使用,这个映射关系被保存在内存中的页表(Page Table)。现代 CPU 架构中一般有 TLB (Translation Lookaside Buffer,翻译后备缓冲,也称为页表寄存器缓冲)存在,在里面保存了经常使用的页表映射项。TLB 的大小有限,一般 TLB 如果只能容纳小于 100 个页表映射项。 我们能让程序的虚拟内存对应的页表映射项都处于 TLB 中,那么能大大提升程序性能,这就要尽量减少页表映射项的个数:页表项个数 = 程序所需内存大小 / 页大小。我们要么缩小程序所需内存,要么增大页大小。我们一般会考虑增加页大小,这就大页分配的由来,JVM 对于堆内存分配也支持大页分配,用于优化大堆内存的分配。那么 Linux 环境中有哪些大页分配的方式呢?
Linux服务器配置文档找不到,你还在为查询Linux服务器硬件信息发愁吗?学会这些命令,让你轻松查看Linux服务器的CPU,内存,硬盘,SN序列号等信息,根本就不用去机房。
前几天我发了一篇文章:在 4GB 物理内存的机器上,申请 8G 内存会怎么样?,但是当时写的比较匆忙,文章中只考虑关闭 swap 的情况,没有提及开启 swap 的情况,有读者希望我补充这部分内容。
k8s kubectl top命令和contained内部 ps 看到的进程内存占用不一致。下午的时候,我被这个问题问倒了。具体如图
负载均衡(uptime) load average: 0.00, 0.00, 0.00
swap是磁盘上的一块区域,可以使一个磁盘分区,也可以是一个文件,也可能是一个两种的组合。当物理内存资源紧张的时候,操作系统(Linux)会将一些不常访问的数据放到swap里。为其他常使用的进程提供更多的物理内存。当系统要访问swap里的数据的时候,操作系统再将swap上的数据加载到内存中。
PostgreSQL的默认最大连接数是100个,但是这个参数可以在服务器启动时进行设置。如果您想增加最大连接数,您还需要同时增加shared_buffers和kernel.shmmax的值,以提高数据库的缓存能力和性能。但是,增加连接数也会消耗更多的内存,所以您应该根据您的系统资源和应用需求来合理调整这个参数。如果您的应用需要大量的连接,您可以考虑使用pg_bouncer等工具来进行连接池管理。
补充说明: ulimit为shell内建指令,可用来控制shell执行程序的资源。
Core Dump 也称之为“核心转储”, 若当前操作系统开启了 core dump ,当程序运行过程中发生异常或接收到某些信号使得程序进程异常退出时, 由操作系统把程序当前的内存状况以及相关的进程状态信息存储在一个 Core 文件中, 即 Core Dump 。通常,Linux 中如果内存越界会收到 SIGSEGV 信号,然后就会进行 Core Dump 相关操作。
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可实时动态监视操作系统的虚拟内存、进程、CPU活动
USER 进程所属用户 PID 进程ID %CPU 进程占用CPU百分比 %MEM 进程占用内存百分比 VSZ 虚拟内存占用大小 单位:kb(killobytes) RSS 实际内存占用大小 单位:kb(killobytes) TTY 终端类型 STAT 进程状态 START 进程启动时刻 TIME 进程运行时长 COMMAND 启动进程的命令
这篇文章其实之前发过,但是最近有位读者跟我反馈,我文章中的实验在 64 位操作系统、2 G 物理内存的场景,申请 8G 内存是没问题的,而他也是这个环境,为什么他就无法申请成功呢?
上一篇文章 linux内核启动流程分析 - efi_stub_entry 中,为了叙述方便,我们只是粗略的讲了下efi_main函数,这里我们再具体看下。
相信大家都有感触,线上服务内存OOM的问题,是最难定位的问题,不过归根结底,最常见的原因: 本身资源不够 申请的太多 资源耗尽 58到家架构部,运维部,58速运技术部联合进行了一次线上服务内存OOM问题排查实战演练,将内存OOM问题定位三板斧分享出来,希望对大家也有帮助。 题目 某服务器上部署了Java服务一枚,出现了OutOfMemoryError,请问有可能是什么原因,问题应该如何定位? 不妨设服务进程PID为10765(没错,就是CPU占用高的那个倒霉的进程《线上服务CPU100%问题快速定位实战》)
内存压力测试的目的是测试系统内存的稳定性和可靠性,以便确定系统是否能够在各种负载情况下正常运行。其主要目的有:
通过ulimit -n命令可以查看Linux系统里打开文件描述符的最大值,一般缺省值是1024,对一台繁忙的服务器来说,这个值偏小,所以有必要重新设置linux系统里打开文件描述符的最大值。那么应该在哪里设置呢?
free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。
内存管理是Linux系统重要的组成部分。为了解决内存紧缺的问题,Linux引入了虚拟内存的概念。为了解决快速存取,引入了缓存机制、交换机制等。
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器
当各位读者看到本次文章的标题,你可能会比较熟悉堆、栈的用法,因为在你学完了c语言后,或多或少都会接触到一点数据结构(但是这里要讲的与数据结构里面的堆和栈还是有点差别的,本次分析这个是从内存分配的角度去看,不是从的数据结构特点去看,而且在笔试面试的时候,经常会遇到这种题目,让你说出他们的区别来。自己亲身体会,遇到了好几次)。后面的数据段、代码段、bss段,可能你平时没有怎么细心总结,现在你可能还真讲不出他们的区别来,不信的话,读者在看到这里可以先暂定一下,在自己以往写了那么多的代码,仔细回忆看看他们有啥区别,如果不知道也没关系,读者可以继续随着我笔步往下看,当你看完或许会发出这样的感叹,原来是这样啊。是的,确实是这样的,包括自身在写这篇文章开始之前,我也讲不出来他们的区别(这里是昨天一个网友在我自己建的一个技术交流群里。提出了一个关于数据初始化的问题,如下图,正如你所见这个可能比较简单,但是要理解这里面的知识点,还是要花点时间来总结一下的):
内存基础概念 先执行一下 top 命令,看结果中关于内存的相关部分 # top 其中的 VIRT、RES、SWAP 都是什么呢? 分别是下面的3个概念 物理内存 Resident - RES
原文链接:https://rumenz.com/rumenbiji/linux-vmstat.html
原文链接:https://rumenz.com/rumenbiji/linux-vmstat.html 微信公众号:入门小站
领取专属 10元无门槛券
手把手带您无忧上云