物理内存
接着查看物理内存使用情况:
free -m
total used free shared buff/cache available
Mem: 64213 7209 33239 20670 23764 35384
Swap: 32191 0 32191
并没有太大的变化 。
top:
top - 23:51:30 up 1 day, 23:35, 4 users, load average: 1.99, 1.97, 2.06
Tasks: 699 total, 2 running, 697 sleeping, 0 stopped, 0 zombie
%Cpu(s): 6.4 us, 2.0 sy, 0.0 ni, 85.6 id, 6.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 65754708 total, 34170344 free, 7248336 used, 24336028 buff/cache
KiB Swap: 32964604 total, 32964604 free, 0 used. 36368028 avail Mem
并没有问题。虽然有预期,但是还是有点失望。随便看看吧。现在数据库有多少进程呀?
select inst_id,machine,program,count(*) from gv$session group by inst_id,machine,program order by 4;
INST_ID MACHINE PROGRAM COUNT(*)
---------- ------------ ---------------------------- ----------
2 bossdb2 [email protected] (PING) 1
.............
2 boss-ei1 JDBC Thin Client 13
1 ilogmaster [email protected] (TNS V1-V3) 23
1 KMGDCCWeb1 JDBC Thin Client 24
2 ipcc-hp-app JDBC Thin Client 522
1 ipcc-hp-app JDBC Thin Client 887
我个去,这是什么情况,一台应用服务器怎么连到数据库里有1400+ 进程。。都是活动的?
select inst_id,status,count(*) from gv$session where machine=‘ipcc-hp-app‘ group by inst_id,status;
INST_ID STATUS COUNT(*)
---------- -------- ----------
1 INACTIVE 862
2 INACTIVE 522
1 ACTIVE 1
都是不活动的。这些进程,占用了多少数据库内存,又占用了多少操作系统的物理内存?前者可能不大,但是后者肯定是有些恐怖的。
这些进程为什么不会退出呢?就算应用里没有退出机制,在数据库里也有空闲连接的配置呀:
col limit for a10
col resource_name for a15
col profile for a20
select profile,resource_name,limit from dba_profiles where resource_name = ‘IDLE_TIME‘;
PROFILE RESOURCE_NAME LIMIT
-------------------- --------------- ----------
DEFAULT IDLE_TIME UNLIMITED
居然是个Unlimited.
此刻我内心,其实已经倾向于是这些进程搞的鬼了。。。先把idle_time 限制起来吧。
alter profile default limit idle_time 180;
限制180,也就是3个小时,已经很长了。等一会儿,看看,果然pmon 已经清理超时进程了。
........
KILL SESSION for sid=(2973, 57359):
Reason = profile limit idle_time
Mode = KILL SOFT -/-/-
Requestor = PMON (orapid = 2, ospid = 33310, inst = 1)
Owner = Process: USER (orapid = 815, ospid = 95705)
Result = ORA-0
.........
现在数据库也可以正常连接。那么基本可以肯定是这些进程搞的鬼。
但是,我心里仍有不甘。真的是这些进程搞得鬼么?还是只是凑巧,其他地方的问题也恢复了。
观察两天,之前重复出现的问题没有再出现。那么基本肯定是这些进程引起的问题。
研究很久,目前也没有找到方法统计进程占用的真实的物理内存,哎