linux内存使用策略swap,Linux Swap使用分析

Linux操作系统性能分析主要包含磁盘IO、CPU、内存以及网络流量,而这里主要针对系统内存的使用进程情况做个分析。

一、如何查看系统内存使用情况

1、根据常用命令查看系统内存使用概况

free  -g

total       used       free     shared    buffers     cached

Mem:            31           31          0          0          0          3

-/+ buffers/cache:         28          3

Swap:           15             7          7

(根据free命令可以看到,系统使用了28G的物理内存,3G的剩余内存,其中swap总15G,已使用7G)

top  (f p M)

top - 14:18:50 up 1280 days,  7:15,  1 user,  load average: 1.05, 1.25, 1.12

Tasks: 229 total,   1 running, 227 sleeping,   0 stopped,   1 zombie

Cpu(s):  0.2%us,  0.1%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:  32949816k total, 32848840k used,   100976k free,   169308k buffers

Swap: 16771776k total,  8384616k used,  8387160k free,  3276360k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  SWAP DATA COMMAND

12428 mysql     15   0 22.2g  20g 3964 S  3.3 66.5  91946:06 1.3g  22g mysqld

22840 cyldj     15   0 9059m 6.7g 9012 S  0.0 21.5  22:05.42 2.1g 8.7g DBAgent

28689 root      15   0  358m  30m 3036 S  0.0  0.1 187:37.41 328m 137m salt-minion

30768 cyldj     21   0  462m  10m 1908 S  0.0  0.0  10:44.60 451m 373m java

22567 root      15   0 86004 3292 2576 S  0.0  0.0   0:00.01  80m  688 sshd

28690 root      20   0  267m 2188  704 S  0.0  0.0   0:00.00 264m  47m salt-minion

661 root      18   0 16340 1836 1632 S  0.0  0.0   0:47.42  14m  308 zabbix_agentd

22569 root      15   0 68156 1520 1188 S  0.0  0.0   0:00.02  65m  408 bash

2901 root      18   0  197m 1336  884 S  0.0  0.0   4:04.57 196m 174m AxisAgent

11236 root      15   0 60672 1324  760 S  0.0  0.0   2:01.21  57m  608 sshd

665 root      15   0 18432 1260  992 S  0.0  0.0  11:39.82  16m  308 zabbix_agentd

662 root      15   0 18432 1256  992 S  0.0  0.0  11:43.36  16m  308 zabbix_agentd

(根据top命令可以看到使用内存最大的进程是mysql进程,其次是dbagent,其中dbagent使用的交换分区较多)

nmon (m)

ATUuyTjnnwIAAAAAAElFTkSuQmCC

nmon下载地址:

(RHEL5)

(RHEL6)

(通过nmon可以看到内存的详细分配情况,其中总内存为32177.6 MB,总swap 16378.7 MB ,空闲93.4 MB,可回收3188.2+166.5 MB,已使用交换分区7273.6MB,已使用的活动数据大小为30099.9MB,可以被交换出内存的数据大小为1590.7  MB)

2、根据系统监控查看系统内存使用情况

sKDXFJlDyjWPMwbTckBP6bqgabwcJPEoJDxXUyON5Fi+Ku4FSILAAAAAGoARBYAAAAA1ACILAAAAACoARBZAAAAAFADILIAAAAAoAZAZAEAAABADYDIAgAAAIAaAJEFAAAAADUAIgsAAAAAagBEFgAAAADUAIgsAAAAAKgBEFkAAAAAUAMgsgAAAACgBkBkAQAAAEANgMgCAAAAgBoAkQUAAAAANQAiCwAAAABqwP8CuPt5g3iJwe8AAAAASUVORK5CYII=

(近7天的内存使用情况)

3、查看指定进程的系统内存使用信息

cat /proc/22840/statm

#virt    res     shr  text lib data dt

2319113 1768037 2253 3836 0 2292997 0

(上述是查看dbagent的内存使用信息,其中单位是页数,所以要看系统页大小4K,第一列是虚拟内存2319113页,第二列是驻留内存1768037页,第三列是共享内存2253页,进程独占内存大小为res-shr)

getconf  PAGESIZE

4096

awk '/^Swap:/ {SWAP+=$2}END{print SWAP" KB"}' /proc/${pid}/smap

for i in `cd /proc;ls |grep "^[0-9]"|awk ' $0 >100'` ;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps ;done |sort -k2nr

(上述命令可以查看进程虚拟内存使用情况)

cat /proc/22840/status |grep Vm

VmPeak:  9341632 kB

VmSize:  9276452 kB

VmLck:         0 kB

VmHWM:   7074296 kB

VmRSS:   7073540 kB

VmData:  9171904 kB

VmStk:        84 kB

VmExe:     15344 kB

VmLib:      4728 kB

VmPTE:     15596 kB

(上述命令可以查看指定进程的内存使用情况VmSize表示虚拟内存大小,VmRSS表示驻留内存大小)

二、综合分析MYSQL数据库内存使用情况sh show_mem_usage.sh

全局内存大小:18592.00 MB

单线程最大内存:25.18 MB

最大线程占用内存: 8815.62 MB

历史最大线程占用内存: 5213.81 MB

Innodb Buffer Pool使用率: 99.00%

从mysql的内存使用和总的物理内存使用来看,服务器的内存使用已经基本达到上限(mysql驻留内存大约是21G,dbagent大约为7G,物理总内存为31G,缓存了3G,大约有2G左右的非活动区内存),当mysql进程、dbagent使用超过5G内存,物理内存不够,就会使用到了swap分区。

三、什么情况下会使用swap分区

1、物理内存确实不够用的情况下,会使用到swap分区。

2、物理内存还有足够的内存使用,比如cache,buffer的剩余较多的情况下使用了swap分区

四、使用swap分区扩展

如果有足够的物理内存,依旧使用了swap分区,可以从以下几方面查看为什么使用了swap分区

1、swap分区比例调整

cat /etc/sysctl.conf  |grep swap

vm.swappiness=0

设置为0表示优先最大限度的使用物理内存缓存数据,而不是磁盘作为分区,值越大越不利于物理内存的充分利用

2、numa陷阱

PZrOZTCadTqdSqWRyNZlcTSQS8U042UI+QiKRgM+VSqWgJoCtoDJI89n5fi4guJ3k83kpFxBSBw1Iq1QoFEjdgOoBNURIRraIPgh8OqGqpF8Z9lUB5XI52RUQUhMNTgVXKMW6zCn5oRr7vd01sIAQubNP01ciCCJT0FkIgsgJdBaCIHICnYUgiJxAZyEIIifQWQiCyAl0FoIgcgKdhSCInEBnIQgiJ9BZCILIif8f+Cw3NSdw+IYAAAAASUVORK5CYII=

8PnH5k9lm+rPQAAAAASUVORK5CYII=

为了提高cpu和内存的数据访问速度、并发度,设计了numa架构,但如果numa的内存分配策略不合理,那么将会严重影响到内存的使用,尤其是对大内存块使用的数据库服务器。

#numactl --hardware

available: 2 nodes (0-1)

node 0 size: 16160 MB

node 0 free: 15 MB

node 1 size: 16131 MB

node 1 free: 78 MB

node distances:

node   0   1

0:  10  20

1:  20  10

(上述命令可以查看各个node节点的物理内存分配情况,可以看到两节点的内存分配比例基本平均,如果node0节点free和和node1的free值相差较大,说明分配策略存在问题,很大可能会带来swap使用,而物理内存空闲的状态)

也可以通过查看numastat查看numa的miss和hit比例来进一步确认

#numastat

node0           node1

numa_hit             39150779957     38736256884

numa_miss             2658848763      8851827358

numa_foreign          8851827296      2658848763

interleave_hit         122652306       137287417

local_node           39096884744     38598664497

other_node            2712743976      8989419745

3、解决方案

(1)启用大页管理

(2)关闭numa***BIOS关闭NUMA

***启动内核关闭:

vi /boot/grub/grub.conf

kernel /boot/vmlinuz-2.6.18-128.1.16.0.1.el5 root=LABEL=DBSYS ro bootarea=dbsys rhgb quiet console=ttyS0,115200n8 console=tty1 crashkernel=128M@16M numa=off

重启操作系统,通过cat /proc/cmdline和numactl --hardware查看是否关闭(3)调整内核参数

内核参数:zone_reclaim_mode,如果为0的话,那么系统会倾向于从其他节点分配内存,如果是1表示系统会倾向于从本地节点回收Cache内存多数时候

vm.swappiness=0echo 0 > /proc/sys/vm/zone_reclaim_mode ; echo "vm.zone_reclaim_mode = 0" >> /etc/sysctl.conf(4)调整内核参数

Mysql可以调整相关参数、交叉启动方式来改善numa,例如numactl --interleave=all  /etc/init.d/mysql start

localalloc规定进程从当前node上请求分配内存;

preferred比较宽松地指定了一个推荐的node来获取内存,如果被推荐的node上没有足够内存,进程可以尝试别的node。

membind可以指定若干个node,进程只能从这些指定的node上请求分配内存。

interleave规定进程从指定的若干个node上以RR(Round Robin 轮询调度)算法交织地请求分配内存。

#NUMA support

numa_interleave = 1

innodb_buffer_pool_populate = 1

flush_caches=1

%E4%BA%A4%E5%8F%89%E6%A8%A1%E5%BC%8F%E5%90%AF%E5%8A%A8%E8%AF%B4%E6%98%8E/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506854.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux从源码编译软件,linux软件源码的编译安装

软件包的组成:1二进制文件/bin,/sbin /usr/bin ,/usr/sbin /usr/local/bin /usr/local/sbin2库文件 /lib, /usr/lib /usr/local/lib3配置文件 /etc,/usr/local/etc4帮助文件 /usr/share/man usr/share/doc5头文件:/usr/include usr/local/includeA . bi…

linux对当前使用的分区分割,实例解说Linux中fdisk分区使用方法

一、fdisk 的介绍fdisk - Partition table manipulator for Linux ,译成中文的意思是磁盘分区表操作工具;本人译的不太好,也没有看中文文档;其实就是分区工具fdsik 能划分磁盘成为若干个区,同时也能为每个分区指定分区…

csky linux 编译内核,TQ2440的EmbedSky_hello模块编译内核问题及解决

已在内核代码中添加EmbedSky_hello驱动为例,进行内核编译时候出现了一下几个问题:1、在 /opt/EmbedSky/linux 2.6.30.4/drivers/char目录下修改“Kconfig”文件,添加如下内容:config EmbedSky_HELLOtristate "TQ2440/SKY2440…

Linux设置swap分区为128g,swap分区或文件的数量与大小限制

在Linux系统下,这个虚拟内存就被叫做swap。Linux swap分区是有限制的。在安装操作系统的时候,安装向导会提示用户需要创建多少的SWaP空间。通常情况下,SWaP比较合适的大小为物理内存的1-2倍。1. 早期的linux对虚拟内存的限制linux2.2以前的内…

linux设备树例程,iTOP-iMX6-设备树内核-实时时钟RTC以及Linux-c测试例程

当 Linux 开发者谈论一个实时时钟,他们通常指的是某种能记录墙上时间,并且有备用电池,以至于在系统关机的时候仍然可以工作的器件。Linux 有两个系列广泛兼容的用户空间 RTC 设备节点:• /dev/rtc : PC 机及兼容机系统…

linux有哪些实时同步工具,rsync文件同步工具常见模式有哪些?linux系统

互联网时代发展迅速,Linux运维技术的需求更多推进不少。市场对于Linux运维人才的需求也在逐渐加大。Linux行业崛起,在云计算大环境下,市场上对高级运维人员的需求将越来越大。文件同步工具rsync是运维工作中会遇到的命令,那么rsyn…

linux下rman自动备份,linux 下rman 自动备份

一、新建备份目录并授权:[oracleTAIXIN-HR ~]$ mkdir -p /home/oracle/app/hr_back (备份目录)mkdir -p /home/oracle/app/hr_back/archbackmkdir -p /home/oracle/app/hr_back/rmanscripts[oracleTAIXIN-HR ~]$ chmod 755 /home/oracle/app/hr_back (授权)chown…

linux jdk bin下载,Linux下安装jdk-6u45-linux-x64.bin

最近在学习linux下java开发,在搭环境的过程中发现网上很多配置都是错误的,现在写出来,供参考:从Oracle上下载jdk-6u45-linux-x64.bin1.下载文件:jdk-6u45-linux-x64.bin,将文件做成光盘挂载[rootlocalhost ~]mount /dev/cdrom /mn…

查看linux上redis的运行状态,Redis教程(七)使用info查看服务状态

一、Redis info命令介绍Redis info命令是Redis自带的一个用于查看服务状态的命令,这个命令类似于top一样可以查看redis服务的整个状态,并且分为了5大类:二、Redisinfo命令语法redis-cli -a redis_pass info #查看所有模块信息redis-cli -a re…

linux应用参数 冒号,Lua-面向对象中函数使用时冒号(:)和点(.)的区别

Lua-面向对象中函数使用时冒号(:)和点(.)的区别,我们先来看一段简单的代码:local Animal {}functionAnimal:Eat( food )print("Animal:Eat", self, food)endfunctionAnimal.Sleep( time )print("Animal.Sleep", self, time)endAnima…

linux tcp cork,在此用例中,TCP_CORK和TCP_NODELAY是否有显着差异?

在写完关于TCP_NODELAY和TCP_CORK的答案之后,我意识到我必须缺少对TCP_CORK的要点的了解,因为我尚不清楚100%为何Linux开发人员认为有必要引入一个新的TCP_CORK标志,而不是仅仅依靠应用程序在适当的时间设置或清除现有的TCP_NODEL…

linux 优先级必须为整数,进程友好性(优先级)设置对Linux没有影响

您看到的行为几乎可以肯定是因为Linux 2.6.38(2010年)中添加了自动组功能.据推测,当您描述运行这两个命令时,它们在不同的终端窗口中运行.如果你在同一个终端窗口中运行它们,那么你应该看到nice值有效.这个答案的其余部分详细阐述了这个故事.内核提供了一种称为自动分组的功能,…

欧框语言框架标准C2,CEFR欧洲语言共同参考框架

http://www.v4.cc/News-3997660.htmlCEFR全称是Common European Framework of Reference for Languages,是由欧洲语言测试者协会(ALTE)于2001年首次发布的一套建议标准,用来评估语言学习者在所学语言的成就,同时也给予一个教育上的评估方针。…

车羊问题c语言编程,C语言-人狼羊菜问题-最容易看懂的解决方法及代码

题目描述:农夫需要把狼、羊、菜和自己运到河对岸去,只有农夫能够划船,而且船比较小,除农夫之外每次只能运一种东西,还有一个棘手问题,就是如果没有农夫看着,羊会偷吃菜,狼会吃羊。请…

c语言简短的泡沫排序法编程,冒泡排序--简单(c语言)

//// main.cpp// bubble//// Created by duanqibo on 2019/7/17.// Copyright © 2019年 duanqibo. All rights reserved.// 冒泡排序 c语言#include #include #include #include #define N 4typedef struct student{int num;char name[20];char sex[2];int age;}stu[…

c语言求a1到an的和,C语言菜鸟基础教程之a++与++a

(一)a在C语言或其它语言中,符号表示“自加”,就是变量在原来的基础上加1。例1:a 0;a;则此时a的值为1。同样的道理,--表示”自减”。例2:a 100;a--;则此时a的值为99。注意,程序语言里没有”自乘”和”自除…

c语言 u16 printf,C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/double/float)(全)...

u16首先必须知道u8,s8等数据类型的定义:typedef signed char s8;typedef unsigned char u8;typedef signed short s16;typedef unsigned short u16;typedef signed int s32;typedef unsigned int u32;typedef signed long long s64;typedef unsigned long long u64;…

算法与数据结构c语言版PPT,C语言算法与数据结构.ppt

C语言算法与数据结构.ppt第十二章 算法与数据结构12.1 算法的基本概念,该节知识点所占试题比重为12,属于重点考查对象,基本上每次必考,主要考查算法的定义和对算法复杂度的理解。历次试题分值在04分之间波动。,12.1.1 考点1 算法的定义,算法是…

android 应用自动重启,Android 应用崩溃后自动重启的方法

public class HKApplication extends Application {private List activityList new ArrayList();Overridepublic void onCreate() {super.onCreate();// 以下用来捕获程序崩溃异常if (!Config.debug) {Thread.setDefaultUncaughtExceptionHandler(restartHandler); // 程序崩溃…

android+自定义版本号,Android打包版本号设置方法

之前没有设置过打包的命名,每次打包都是默认的"app-realease.apk",之后手动修改名字来显示出它是一个新版本。晚上学习了如何配置打包名称,很简单,修改build.gradle里的代码就行。详细记录如下:1、打开app这…