file-max設定過小導致oracle資料庫hang住

lmxx2020發表於2024-02-02

伺服器上ping報錯ping: socket: Too many open files in system

[root@rac1 ~]# ping 192.168.238.254
ping: socket: Too many open files in system

正常情況下“Too many open files in system”報錯都是open files引數設定過小導致。

root使用者和oracle使用者檢查,配置正常,如下:

[oracle@rac1 ~]$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 64054
max locked memory       (kbytes, -l) 14788901
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536                        <===============配置正常
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) unlimited
cpu time               (seconds, -t) unlimited
max user processes              (-u) 16384
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

message日誌報錯:

Feb  1 20:53:50 rac1 systemd: Looping too fast. Throttling execution a little.
Feb  1 20:53:50 rac1 kernel: VFS: file-max limit 790770 reached
Feb  1 20:53:51 rac1 kernel: VFS: file-max limit 790770 reached
Feb  1 20:53:51 rac1 systemd: Looping too fast. Throttling execution a little.
Feb  1 20:53:52 rac1 kernel: VFS: file-max limit 790770 reached
Feb  1 20:53:52 rac1 kernel: VFS: file-max limit 790770 reached
Feb  1 20:53:53 rac1 systemd: Looping too fast. Throttling execution a little.
Feb  1 20:53:53 rac1 kernel: VFS: file-max limit 790770 reached
Feb  1 20:53:53 rac1 kernel: VFS: file-max limit 790770 reached
Feb  1 20:53:54 rac1 kernel: VFS: file-max limit 790770 reached

檢查:

[root@rac1 ~]# sysctl -a | grep file-max
fs.file-max = 790770

[root@rac1 ~]# cat /proc/sys/fs/file-nr
2833920    0    790770

[root@rac1 ~]# cat /proc/sys/fs/file-nr
2838688    0    790770

[root@rac1 ~]# watch -n 1 cat /proc/sys/fs/file-nr

2993984    0    790770

當前開啟的檔案總數持續變大,超過了上限的預設值790770

修改fs.file-max值的大小:

sysctl -w fs.file-max = 6815744


vi  /etc/sysctl.conf 增加

fs.file-max = 6815744

sysctl -p生效

修改後恢復正常,message異常告警消失。

另外:nr_open用於限制單個程式可以分配的最大檔案開啟數

cat /proc/sys/fs/nr_open
1048576

一個程式可以開啟的檔案數 < hard limit < nr_open,soft limit是告警值,可以超過這個值。

file-max作業系統對於檔案開啟數有一個全域性的限制,可以透過/proc/sys/fs/file-max檢視。

來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/22967847/viewspace-3006103/,如需轉載,請註明出處,否則將追究法律責任。

相關文章