Linux下看内存和CPU使用率一般都用top命令,但是实际在用的时候,用top查看出来的内存占用率都非常高,几乎用掉了全部。本部门测试机器只跑了ORACLE数据库,机器内存16G,使用的也几乎16G,有些不了解,这到底是怎么一回事,难道都是ORACLE占用的,可是SGA我分配的是6G,应该还剩下10G啊?带着这些疑问,我就开始学习之旅。
1. 使用TOP命令查看如下:
top - 11:20:23 up 3 days, 11:51, 2 users, load average: 1.17, 1.50, 1.21
Tasks: 323 total, 1 running, 319 sleeping, 3 stopped, 0 zombie
Cpu(s): 2.7%us, 6.9%sy, 0.0%ni, 81.0%id, 6.3%wa, 0.5%hi, 2.6%si, 0.0%st
Mem: 16435932k total, 16350264k used, 85668k free, 10012k buffers
Swap: 4192956k total, 2535368k used, 1657588k free, 14756048k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
26008 oracle 25 0 6321m 284m 279m D 56.5 1.8 48:46.13 oracle
458 root 10 -5 0 0 0 S 8.3 0.0 30:07.92 kswapd0
8662 oracle 18 0 6327m 64m 56m S 0.7 0.4 30:15.02 oracle
25838 oracle 15 0 6320m 40m 36m S 0.7 0.3 0:00.38 oracle
26542 root 15 0 12892 1268 812 R 0.7 0.0 0:00.11 top
8770 oracle 15 0 6318m 81m 78m S 0.3 0.5 6:19.91 oracle
1 root 15 0 10368 672 564 S 0.0 0.0 0:04.52 init
2 root RT -5 0 0 0 S 0.0 0.0 0:00.72 migration/0
3 root 34 19 0 0 0 S 0.0 0.0 0:03.44 ksoftirqd/0
4 root RT -5 0 0 0 S 0.0 0.0 0:00.31 migration/1
5 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/1
6 root RT -5 0 0 0 S 0.0 0.0 0:00.19 migration/2
7 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/2
8 root RT -5 0 0 0 S 0.0 0.0 0:00.28 migration/3
9 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/3
10 root RT -5 0 0 0 S 0.0 0.0 0:02.97 migration/4
11 root 34 19 0 0 0 S 0.0 0.0 0:28.05 ksoftirqd/4
实际剩余可用内存=free+buffers+cached
实际已用内存=used-buffers-cached
按照公式得出以上机器可用内存空间为:85668k+ 10012k +14756048k = 14851728k (14.16G)
2. 数据库启动前后的内存使用对比,发现数据库sga_max_size设置为6G,可是在启动数据库后不是直接将6G占用,只是占用一部分。另外还有一点,就是可以通过-/+ buffers/cache:后面的值 来看数据库使用与空闲空间。详细信息如下:
启动数据库前:
[root@tora01 ~]# free -m
total used free shared buffers cached
Mem: 16050 13476 2574 0 18 13034
-/+ buffers/cache: 423 15627
Swap: 4094 0 4094
启动数据库后:
[root@tora01 ~]# free -m
total used free shared buffers cached
Mem: 16050 15967 83 0 7 13424
-/+ buffers/cache: 2534 13515
Swap: 4094 2321 1772
总结:linux操作系统中内存使用的显现需要DBA们注意,一不小心就以为占了全部。再一个发现oracle在启动instance时,并不是把SGA_MAX_SIZE的值一下子显示在已用当中,而是先显示一部分,后期使用过程中再次增加显示。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26148431/viewspace-1587592/
,如需转载,请注明出处,否则将追究法律责任。