A. linux数据库服务器物理内存和虚拟内存满了怎么排查和解决
一、查看物理内存
执行如下命令即可查看物理内存,执行效果如下图所示:
dmidecode -t memory | grep Size
二、配置空间
物理内存是没办法配置的,只能配置虚拟内存,在Linux系统即Swap分区。具体操作swap分区的方法如下:
B. 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.查看挂载是否成功
C. Linux上的虚拟内存swap简介
在Linux操作系统中,swap分区的作用相当于Windows系统下的虚拟内存。当物理内存不足时,将部分硬盘空间当内存使用,由于不是真正的内存,因此将其称之为虚拟内存,它的目的就是为了解决内存不足的情况。
Linux操作系统中的swap可以分为两种:一种是将某个物理磁盘分区作为swap,另一种是通过文件来实现swap。
既然配置swap对桌面系统有帮助,那么配置多少大小的swap比较合适呢?下面是ubuntu给出的建议:
或者直接将swap设置为物理内存的2倍!
输入命令 swapon -s 可以查看系统的swap信息,从下面的输出可以看出,设置了一个大小为1G的虚拟内存。
重启系统,再次执行 swapon -s 查看虚拟内存。
本文的测试环境为阿贝云免费云服务器(https://www.abeiyun.com/),阿贝云目前正在进行"免费虚拟主机"和“免费云服务器”体验活动,感兴趣的朋友可以试试。
D. linux中查看虚拟内存和cpu占用率的命令是什么
linux虚拟内存统计:vmstat
命令
vmstat
-
报告虚拟内存的统计信息。vmstat
对系统的进程情况、内存使用情况、交换页和
I/O
块使用情况、中断以及
CPU
使用情况进行统计并报告相应的信息。Memory
swpd:
虚拟内存使用情况,单位:KBfree:
空闲的内存,单位KBbuff:
被用来做为缓存的内存数,单位:KB.si:
从磁盘交换到内存的交换页数量,单位:KB/秒so:
从内存交换到磁盘的交换页薯庆数量,单位:KB/秒。运行
vmstat
不须要特别的使用权限
这些系统信息是用来向用户提供分析系统瓶颈问题信息的。linux在计算进程情况时不将正在运行的
vmstat
自己计算进去。
vmstat对系统的虚拟内存、进程、CPU活动进行监视,同时它也对磁盘和forks和vforks操作的个数进行汇总。
不足是:vmstat不能对某个进程进行深入分析,它仅是一对系统的整体情况进行分析。
例如:[angel@home
/angel]#
vmstat
procs
memory
swap
io
system
cpu
r
b
w
swpd
free
buff
cache
si
so
bi
bo
in
cs
us
sy
id
0
0
0
7180
1852
56092
48400
0
0
6
5
24
8
0
0
18
其中:
Procs
r:
等待运行的进程数
b:
处在非中断睡眠状态的进程数
w:
被交换出去的可运行的进程数。
Memory
swpd:
虚拟内存使用情况,单位:KB
free:
空闲的内存,单位KB
buff:
被用来做为缓存的内唯咐存数,单位:KB
Swap
si:
从磁盘交换到内存的交换页数量,单位:KB/秒
so:
从内存交换到磁盘的交换页数量,单位:KB/秒
IO
bi:
发送到块设备的块数,单位:块/秒
bo:
从块设备接收到的块数,单位:块/秒
System
in:
每秒的中断数,包括时钟中断
cs:
每秒的环境(上下文)切换次数
CPU
按
CPU
的总使用百分比来显数山握示
us:
CPU
使用时间
sy:
CPU
系统使用时间
id:
闲置时间
E. 2021-01-11:linux中,如何看内存的使用情况呢
1./proc/meminfo
查看 RAM 使用情况最简单的方法是通过 /proc/meminfo。这个动态更新的虚拟文件实际上是许多其他内存相关工具 (如:free / ps / top) 等的组合显示。/proc/meminfo 列出了所有你想了解的内存的使用情况。进程的内存使用信息也可以通过 /proc//statm 和 /proc//status 来查看。
$cat/proc/meminfo
图0:Linux下查看内存使用情况方法总结
2.atop
atop 命令是一个终端环境的监控命令。它显示的是各种系统资源(CPU, memory, network, I/O, kernel)的综合,并且在高负载的情况下进行了彩色标注。
$sudoatop
3.free
free 命令是一个快速查看内存使用情况的方法,它是对 /proc/meminfo 收集到的信息的一个概述。
$free-h
4.GNOME System Monitor
GNOME System Monitor 是一个显示最近一段时间内的 CPU、内存、交换区及网络的使用情况的视图工具。它还提供了一种查看 CPU 及内存使用情况的方法。
$gnome-system-monitor
5.htop
htop 命令显示了每个进程的内存实时使用率。它提供了所有进程的常驻内存大小、程序总内存大小、共享库大小等的报告。列表可以水平及垂直滚动。
$htop
6.KDE System Monitor
功能同 4 中介绍的 GENOME 版本。
$ksysguard
7.memstat
memstat 是一个有效识别 executable(s), process(es) and shared libraries 使用虚拟内存情况的命令。给定一个进程 ID,memstat 可以列出这个进程相关的可执行文件、数据和共享库。
$memstat-p
8.nmon
nmon 是一个基于 ncurses 的系统基准测试工具,它可以监控 CPU、内存、I/O、文件系统及网络资源等的互动模式。对于内存的使用,它可以实时的显示总 / 剩余内存、交换空间等信息。
$nmon
9.ps
ps 命令可以实时的显示各个进程的内存使用情况。Reported memory usage information includes %MEM (percent of physical memory used), VSZ (totalamount of virtual memory used), and RSS (total amount of physical memory used)。你可以使用 “–sort” 选项对进程进行排序,例如按 RSS 进行排序:
$psaux–sort-rss
图8:Linux下查看内存使用情况方法总结
10.smem
smem 命令允许你统计基于 / proc 信息的不同进程和用户的内存使用情况。内存使用情况的分析可以导出图表(如条形图和饼图)。
11.top
top 命令提供了实时的运行中的程序的资源使用统计。你可以根据内存的使用和大小来进行排序。
12.vmstat
vmstat 命令显示实时的和平均的统计,覆盖 CPU、内存、I/O 等内容。例如内存情况,不仅显示物理内存,也统计虚拟内存。
F. linux里查看虚拟内存的命令是什么
free -m最后一排的swap就是虚拟内存
G. linux 下怎么查看一个进程占用内存大小
这里介绍下查看一个进程占用内存大小的方法。
1、首先单击桌面左上角的应用程序,选择系统工具选项,如下图所示。