Linux_x86_64BIT内存管理与分布之数据库场景之一

news/2024/7/20 14:02:37 标签: 内存管理, linux, 数据库

从Linux系统看内存的使用情况和分布情况着实一片混乱. 为此我们接着上篇<<部分SWAP 内存知识>>
http://blog.csdn.net/zengmuansha/article/details/51776899
部分内容继续讲解
FREE -M 这个命令显示的结果 着实不太友好
这里写图片描述

要是变成下面这样子就好看多了,我把第二行-/+buffer/cache 变成了MEM
             total       used       free     shared    buffers     cached
alloc:        4092        3270       826        0          36        1482
Mem:          4092        1748      2344
Swap:         4096           0      4906

第一行表明是内存分配情况,这里指内存页分配
第二行就是内存使用情况,已使用和未使用.
OK 到这里我们的FREE,讲完了.没啥可以继续讲它的了.

接下来我们讲/PROC/MEMINFO 如果去百度查的话 可以查看大部分名词解释. 当这是CENTOS 6.这个可是真实业务库的内存信息.信息跟上面的数据是不一样的,大家不用去纠结它.里面有些字段跟FREE 命令我想大家都能看得懂.

系统内存信息
MemTotal:       32880396 kB
MemFree:          274580 kB
Buffers:          230840 kB
Cached:         27474348 kB
SwapCached:         6680 kB
Active:         20240448 kB
Inactive:        8930104 kB
Active(anon):    6440892 kB
Inactive(anon):   936684 kB
Active(file):   13799556 kB
Inactive(file):  7993420 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:      20971516 kB
SwapFree:       20311876 kB
Dirty:               120 kB
Writeback:             0 kB
AnonPages:       1459948 kB
Mapped:          5433048 kB
Shmem:           5912212 kB
Slab:             772980 kB
SReclaimable:     679996 kB
SUnreclaim:        92984 kB
KernelStack:        5752 kB
PageTables:      2397380 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    37411712 kB
Committed_AS:   14264512 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      201448 kB
VmallocChunk:   34359526916 kB
HardwareCorrupted:     0 kB
AnonHugePages:    112640 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       10240 kB
DirectMap2M:    33544192 kB

重点关注信息如下:

MemTotal:       32880396 kB
MemFree:          274580 kB
Buffers:          230840 kB
Cached:         27474348 kB
SwapCached:         6680 kB
SwapTotal:      20971516 kB
SwapFree:       20311876 kB
Shmem:           5912212 kB
Slab:             772980 kB
SReclaimable:     679996 kB
SUnreclaim:        92984 kB
KernelStack:        5752 kB
PageTables:      2397380 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

MemTotal,Buffers,MemFree,SwapTotal,SwapFree,Cached 这些都跟FREE一样的
真实业务库的FREE

             total       used       free     shared    buffers     cached
Alloca:      32109       31891        218          0        225      26896
Mem:         32109        4769      27340
Swap:        20479         643      19836

我们画出按功能的内存分布图
这里写图片描述

再结合meminfo重点信息
Used 内存 4769MB 当中内核的PageTable,Kernel,Salb内存.
这里写图片描述

2397380 +772980 +5752 =3101MB

那么使用内存总量减去内核内存 :4769-3101=1668MB
应该是进程使用的内存了1668MB

业务系统进程情况如下:

All Process Number:                        634
System Process Number:                     198
Oracle User Procuess Number:               416
Oracle DB BackGround Process Number:        30
Oracle DB Client Process Link Number:      367
Oracle User NO DB Procuess Number:          17
Other User Process Number:                  26

使用TOP看内存 关注角度是进程使用的内存
这里写图片描述

VIRT 进程的虚拟内存大小; RES进程物理内存大小; SHR是进程的共享内存大小
基本上进程独占内存:RES-SHR.
如果按照TOP来进程累积的话 必然共享内存会重复计算 .
那么这共享内存是什么呢? 是ORACLE的SGA 吗? 是的 每个前台进程从TOP上看都包含SGA+PGA.
另外还有个进程共享库.
所以共享内存=SGA+LIB .
因此数据库进程就全包,普通进程就包含LIB.

Liunx 系统各个进程的信息在 /proc/$pid/

[root@localhost proc]# cat /proc/1/statm
487 185 133 31 0 67 0
很简单地返回7组数字,每一个的单位都是一页 (常见的是4KB)
分别是
size:任务虚拟地址空间大小
Resident:正在使用的物理内存大小
Shared:共享页数
Trs:程序所拥有的可执行虚拟内存大小
Lrs:被映像倒任务的虚拟内存空间的库的大小
Drs:程序数据段和用户态的栈的大小
dt:脏页数量CLE PGA内存:

使用SHELL脚本来计算进程使用内存:
$ cat RSS.sh
#/bin/bash                                                                                                              
for PROC in `ls  /proc/|grep "^[0-9]"`
do
  if [ -f /proc/$PROC/statm ]; then
      TEP=`cat /proc/$PROC/statm | awk '{print ($2)}'`
      RSS=`expr $RSS + $TEP`
  fi
done
RSS=`expr $RSS \* 4`
echo $RSS"KB"

计算所有进程使用内存减去共享内存:
TOTAL RAM USED:1425 MB

其中ORACLE进程当中的PGA内存:
POGRAM                        COUNT(PID) PGA_USE_MB PGA_ALLOC_MB PGA_FREE_MB PGA_MAX_MB
------------------------------ ---------- ---------- ------------ ----------- ----------
oracle@oraclemain              367           376.298      739.694     162.438   1734.073
oracle@oraclemain (ARC3)       1              52.399      131.117      77.875    131.117
oracle@oraclemain (ARC2)       1              43.035        87.43      35.688      87.43
oracle@oraclemain (ARC0)       1              53.997       75.992      21.188     75.992
oracle@oraclemain (NSS2)       1              24.262       56.742      32.375      65.68
oracle@oraclemain (DBW0)       1               7.026       33.328          26     33.328
oracle@oraclemain (ARC1)       1              10.944       12.742       1.063     12.742
oracle@oraclemain (TNS V1-V3)  1               3.718         4.25           0     12.125
oracle@oraclemain (LGWR)       1              10.905       11.492           0     11.492
oracle@oraclemain (SMON)       1               1.227        6.414       4.063      6.414
oracle@oraclemain (CJQ0)       1               1.243         5.75       4.188       5.75
oracle@oraclemain (Q001)       1               3.299        5.414        .813      5.414
oracle@oraclemain (SMCO)       1               4.858        5.351           0      5.351
oracle@oraclemain (MMON)       1               1.905        4.734       2.375      4.734
oracle@oraclemain (Q002)       1               2.942         3.68        .375       3.68
oracle@oraclemain (DIA0)       1                2.35        3.351         .75      3.351
oracle@oraclemain (J000)       1               0.677        1.867           0      1.867
oracle@oraclemain (RECO)       1               0.768         1.68        .188       1.68
oracle@oraclemain (DBRM)       1               0.734        1.367        .188      1.367
oracle@oraclemain (CKPT)       1               0.785        1.013           0      1.013
oracle@oraclemain (MMNL)       1                0.75         .992           0       .992
oracle@oraclemain (W000)       1               0.768         .867           0       .867
oracle@oraclemain (J001)       1               0.658         .805           0       .805
oracle@oraclemain (VKTM)       1               0.658         .742           0       .742
oracle@oraclemain (DIAG)       1               0.658         .742           0       .742
oracle@oraclemain (MMAN)       1               0.661         .742           0       .742
oracle@oraclemain (PSP0)       1               0.661         .742           0       .742
oracle@oraclemain (GEN0)       1               0.665         .742           0       .742
oracle@oraclemain (PMON)       1                0.67         .742           0       .742
oracle@oraclemain (QMNC)       1               0.662         .742           0       .742

PGA 总分配内存 :1201.266MB

数据库里查的PGA情况: PGA ALLOCATED:1.174GB 1020MB

NAME                                                       VALUE UNIT          UNIT_GB
---------------------------------------- ----------------------- ---------- ----------
aggregate PGA target parameter                   69,1221,2992.00 bytes           6.437
aggregate PGA auto target                        56,5880,8320.00 bytes            5.27
global memory bound                               6,9122,0480.00 bytes            .643
total PGA inuse                                   6,3918,1824.00 bytes            .595
total PGA allocated                              12,6059,3152.00 bytes           1.174
maximum PGA allocated                            38,8144,1280.00 bytes           3.614
total freeable PGA memory                         3,8856,2944.00 bytes            .361
process count                                             399.00

使用下面的脚本可显示出每个进程的独占内存. 然后导到文本文件中 再GREP…过滤再统计便的ORACLE 前后台进程.

echo -e
echo "进程实际独占物理内存大小:"
#!/bin/bash
# Get current swap usage for all running processes
# writted by zengfankun
function GetProcRam {
SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do
PID=`echo $DIR | cut -d / -f 3`
if [  -d $DIR ]; then
PROGNAME=`ps -p $PID -o cmd --no-headers`
RAM_PAGES=`cat $DIR/statm | awk '{print $2}'`
SHARD_PAGES=`cat $DIR/statm | awk '{print $3}'`
let REAL_PAGES=$RAM_PAGES-$SHARD_PAGES
REAL_RAM=$(expr $REAL_PAGES \* 4 )
if [ $REAL_RAM -gt 0 ] ; then
echo -e "$PID\0011$REAL_RAM\0011$PROGNAME"
fi
let SUM=$SUM+$REAL_RAM
fi
done
echo "TOTAL RAM USED:$(expr $SUM / 1024) MB"
}
echo -e "PID\0011REAL_RAM_USED(KB)\0011PROGNAME"
GetProcRam |sort -rn -k2

ORACLE 前台进程 1159.558594 MB 后台进程 182.9765625 MB =>1342.5351565 mb
那么新的内存分布就出来了

这里写图片描述

这个业务库是大家都通用的数据库ORACLE 11.2.0.1.0 版本 而且都是默认安装的.
这SGA 在….
/proc/meminfo
Shmem: 5912212 kB

文件系统 容量 已用 可用 已用%% 挂载点
/dev/sda2 20G 9.4G 9.2G 51% /
tmpfs 16G 6.2G 9.6G 40% /dev/shm

“内存动态组件分配情况:”

COMPONENT                 CURRENT_GB      MINGB      MAXGB
------------------------- ---------- ---------- ----------
shared pool                   3.3125      3.125     3.3125
large pool                     .0625      .0625      .0625
java pool                       .125       .125       .125
streams pool                    .125       .125       .125
SGA Target                    6.1875     4.4375     6.1875

数据库来说我们使用了6.1875GB SGA
SGA在/dev/shm 里分配. shm 已用了9.6GB
而meminfo当中的shmem 为5773MB 三者之间有误差哦!!
呵呵 要继续研究研究下!!

不过SGA 可包含在CACHED里面哦
这里写图片描述


http://www.niftyadmin.cn/n/682081.html

相关文章

ECSHOP session 的使用 注意事项 ,ecshop 批发 代码模式切换,普通会员特殊会员切换

ECSHOP session 的使用 注意事项&#xff0c;。 因为用的是 cls_session 类 所以使用的时候&#xff0c;需要在init.php 的cls_session 类初始化 之后调用&#xff0c;否则为空 if(isset($_SESSION[user_rank_general]) && isset($_SESSION[user_rank_special]) ){// e…

Django(六)模型(model)系统 -- 常用查询语法及进阶

一般操作 必知必会13条 <1> all(): 查询所有结果<2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象<3> get(**kwargs): 返回与所给筛选条件相匹配的对象&#xff0c;返回结果有且只有一个&#xff0c;如果符合筛选条件…

java连接mongodb_因为 MongoDB 没入门,我丢了一份实习工作

有时候不得不感慨一下&#xff0c;系统升级真的是好处多多&#xff0c;不仅让我有机会重构了之前的烂代码&#xff0c;也满足了我积极好学的虚荣心。你看&#xff0c;Redis 入门了、Elasticsearch 入门了&#xff0c;这次又要入门 MongoDB&#xff0c;感觉自己变秃的同时&#…

ORACLE DATABASE LICENSES 计算方法和收费

Oracle的License许可购买有两种&#xff1a;按照用户数和CPU个数&#xff08;即无线用户版&#xff09;。 购买oracle时的用户数怎么算&#xff1f;Oracle数据库按照用户数授权&#xff0c;是指最终端的连接到Oracle数据库的用户数。按照用户数来买的时候只能用于一个系统&…

教您如何从ECSHOP整站中提取单独模板的方法

教您如何从ECSHOP整站中提取单独模板的方法 网站开发中心/ 2016-01-06/ 关注人气&#xff1a;434 当我们看到某个商城模版很好看&#xff0c;希望能放到自己的ECSHOP商城中&#xff0c;但大部份都是整站带数据包&#xff0c;这个时候我们就会想从ecshop整站中取单独模板&#x…

巧遇ORA-00600: 内部错误代码, 参数: [kcratr_nab_less_than_odr]

下午开发人员说测试数据库起不来了, 呵呵 开发和测试数据库,我向来不管的,反正JAVA工程师是万能,啥都会! 问他是咋回事呢? 他说是停电了, 欺负我书读的少呢? 上午还给你修改了数据库占用内存的大小.下午整个办公司都没停过电啊? 他也支支吾吾下说不清楚. 我也难去理他. 数…

ecshop ecs_template 解释 作用,数据字段 首页自定义分类显示,美乐乐

ecshop ecs_template 解释 作用&#xff0c;数据字段 作用&#xff1a; 用于某个模板的个性化设置&#xff0c;例如首页分类显示 哪几个分类 搜索 结果 使用方法 assign_dynamic(index);$smarty->assign(cat_goods,$smarty->_var[cat_goods_1]);$smarty->assign(good…

java 模拟ajax请求_学 Java 网络爬虫,需要哪些基础知识?

说起网络爬虫&#xff0c;大家想起的估计都是 Python &#xff0c;诚然爬虫已经是 Python 的代名词之一&#xff0c;相比 Java 来说就要逊色不少。有不少人都不知道 Java 可以做网络爬虫&#xff0c;其实 Java 也能做网络爬虫而且还能做的非常好&#xff0c;在开源社区中有不少…