env

  • centos7.x 2c8g
  • oracle11g-11.0.4 4g
部署的oracle服务,间歇性的高负载发现有个kswapd0占用比较高的cpu,导致实例监听异常进而导致数据库连接异常。

#kswapd0

#memory

1.cache/buffer

Cache:高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。

Buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。

通俗点:
cache是高速缓存,用于CPU和内存之间的缓冲;
buffer是I/O缓存,用于内存和硬盘的缓冲

2.kswapd

kswapd0占用过高是因为物理内存不足,使用swap分区与内存换页操作交换数据,导致CPU占用过高。

解决办法:
01、禁止swap
02、扩大内存

3.stop oracle instance

su - oracle
export ORACLE_SID=sydb
sqlplus / as sysdba

shutdown immediate    //关闭sydb instance
startup    //等swap移除后在启动sydb

目的释放出内存,方便swap释放空间迁移到内存中

4.disable swap

#方法1: 自动卸载swap

swapoff -a
vi /etc/fstab   #swap一行注释
mount -a

#方法2: 卸载swap设备

swapon  -s
swapoff /dev/dm-1
vi /etc/fstab   #swap一行注释
mount -a

#观察swap释放的情况

watch 'free -m'