有一些程序在运行过程中,会频繁申请和释放内存,例如Oracle 的Listener连接程序在使用Dedicated设置,并且连接属于短连接的情况下,会不断建立新连接,申请内存空间,完成客户端SQL请求,然后释放内存,退出。当系统繁忙的时候,表象就是系统建立很多新进程,进程号不断变化,同时有大量的sr和fr,而且fr与sr几乎相等(在系统内存很多的情况下,否则fr一般只有1/6-1/4sr大小,甚至更少。这说明检索了4-6块的物理内存,才发现一块内存可以释放)。这种情况下,即使系统有足够的内存进行调度,也会由于系统浪费了大量的CPU资源用于内存数据检索,而导致系统运行缓慢。解决方式是通过Oracle设置将短连接类型变成长连接,例如设置shared server/service;延长连接程序的空闲等待时间,甚至更改客户端的工作方式,避免不必要的内存扫描/请求和释放动作。 |