今天連接數據庫時非常的慢,大概將近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 記錄下來方便以后使用