oracle数据库连接缓慢

今天连接数据库时非常的慢,大概将近1分钟,才能连上,感觉不对,登录数据库所在的服务器,进行检查,常规的内存、硬盘、CPU全都正常,然后想要进入oracle用户时报错了:su: cannot set user id: Resource temporarily unavailable  百度一下,没有足够的资源,原来是这的问题,解决步骤:
1、检查oracle用户的资源上限:
cat /etc/security/limits.conf
oracle soft nproc 2047  # oracle告警线程
oracle hard nproc 16384  # oracle最大线程
oracle soft nofile 1024 # oracle用户最大告警文件打开数量
oracle hard nofile 65536 # oracle用户最大文件打开数量
这是oracle用户的配置,然后目前oracle使用的最大进程是多少呢 ?

2、检查oracle用户使用的最大进程 

[root~]# ps -U oracle |wc -l

2007

进程使用没问题,文件数呢?

3、检查oracle用户使用的文件打开数

[root~]# lsof |grep oracle |wc -l

60896

4、发现文件数60896,比最大告警数1024 多出60倍!!问题就在这里了,查看了一下网上,多是改大limits上限,我尝试改了一下,虽然管用,但是打开的文件数却一直增长,治标不治本

5、所以查看一下oracle用户所打开的文件都是什么很有必要

[root]# lsof |grep oracle > oracle.txt

打开oracle.txt文件,发现大部分文件都是sendmail或者postdrop,光这倆就占了5.4W多个文件数,百度sendmail和postdrop,发现是因为定时任务会启动邮件postfix进行发送邮件,但是服务器中没有进行sendmail配置,所以导致postdrop,这些就变成僵尸文件,一直打开无法关闭了,在oracle用户下6、把定时任务设置成不发邮件

 crontab -e

MAILTO ="" --不发邮件

7、然后删除sendmail和postdrop相关的进程

 ps -ef | grep sendmail | grep -v grep | awk '{print $2}' | xargs kill

 ps -ef | grep postdrop | grep -v grep | awk '{print $2}' | xargs kill

8、再查oracle用户文件打开数

[root]# lsof |grep oracle |wc -l

8476

到此解决问题~~o(∩_∩)o 记录下来方便以后使用

猜你喜欢

转载自www.cnblogs.com/last-summer/p/10481691.html
今日推荐