亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

超大集群max-open-file問題排查方法

2024-09-25 09:31:58
30
0

max-open-file問題排查

 

問題現象

 

[ERROR] HCCP(10460,all_reduce_test):2024-08-02-13:38:15.724.370 [rs_socket.c:570]tid:10497,rs_epoll_event_listen_in_handle(570) : IP:10.241.16.13 accept() failed ! errno:24
[ERROR]
 HCCP(10460,all_reduce_test):2024-08-02-13:38:15.724.404 [rs_socket.c:570]tid:10497,rs_epoll_event_listen_in_handle(570) : IP:10.241.16.13 accept() failed ! errno:24

 

問題現象1 同時運行128臺服務器,拋出如上錯誤,通過二分法查出,當同時運行小于124節點,正常運行;當大于等于124個節點,就拋出這一個錯誤,看起來和節點數有關系。

 

問題現象2迷惑點在于, 有的進程limit是很大(1048576) 有的進程limit進程很小,被限制住了是1024 ,是服務器配置不一樣導致的嗎?

 

全局沒有限制

  

進程級有限制


 每個進程又啟動6個子進程 那么一共有6X8=48個子進程


 

通過pstree 查看進程樹,之后一層層的看每個進程的limits   限制

[root@ccseagent-8fff4b8c1c /]# cat /proc/6300/limits  | grep "Max open files"

Max open files            1024                 524288               files

[root@ccseagent-8fff4b8c1c /]#

 

[root@ccseagent-8fff4b8c1c /]# cat /proc/xxx/limits  | grep "Max open files"

Max open files            1024                 524288               files

[root@ccseagent-8fff4b8c1c /]#

 

驗證方法1

 

[root@ccseagent-8fff4b8c1c /]# cat /proc/sys/fs/nr_open

1073741816

[root@ccseagent-8fff4b8c1c /]#

 

解決動態修改/proc/{pid}/limits

 

動態修改方式1

echo - n "Max open files=65535:65535" > /proc/6300/limits

 

動態修改方式2

prlimit --nofile=65536:65536 --pid 6300

 

當動態修改之后,發現立馬就不再報錯了,可以正常出結果了,說明確實是因為max-open-file導致的。

但是是誰限制住了max-open-file ,并且限制住在1024還不知道。

驗證方法2

 

本人日常開發流程中常使用 PyCharm 中的 Remote Interpreter,其通過 SSH 連接到基于 systemD 的容器環境,長時間運行項目后會出現 OSError: [Errno 24] Too many open files。雖然這個問題一定程度上可能與業務代碼有關,但默認限制允許單進程打開的文件數量(1024)屬實也太低了,多線程場景下會超出限制也是常有的事情。

 

看了這個博客才知道,和我們的現象是一致的。

原來:

# cat  /etc/pam.d/sshd | grep pam_limits.so

session    required     pam_limits.so

 

修改后:(注釋掉了)

sed -i '/pam_limits.so/s/^/#/' /etc/pam.d/sshd

# cat  /etc/pam.d/sshd | grep pam_limits.so

#session    required     pam_limits.so

 

看來很多,越來越多的信息指向了PAM模塊。和PAM有千絲萬縷的聯系。

 

排查過程

[root@ccseagent-8fff4b8c1c /]# ulimit -a

 

[root@ccseagent-8fff4b8c1c /]# ulimit -c

unlimited

[root@ccseagent-8fff4b8c1c /]#

 

[root@ccseagent-8fff4b8c1c /]# cat /proc/sys/fs/file-max

10485760

[root@ccseagent-8fff4b8c1c /]#

 

[root@ccseagent-8fff4b8c1c /]# cat /etc/security/limits.conf

*                soft    nofile         655350

*                hard    nofile         655350

*                soft    nproc          65535

*                hard    nproc          65535

[root@ccseagent-8fff4b8c1c /]#

 

 

Centos7 & ubuntu 系統中,使用Systemd替代了之前的SysV/etc/security/limits.conf文件的配置作用域縮小了。

/etc/security/limits.conf的配置,只適用于通過PAM認證登錄用戶的資源限制,它對systemdservice的資源限制不生效。因此登錄用戶的限制,通過/etc/security/limits.conf/etc/security/limits.d下的文件設置即可。

 

對于systemd service的資源設置,則需修改全局配置:

l   /etc/systemd/system.conf

l   /etc/systemd/user.conf

同時也會加載兩個對應目錄中的所有.conf文件/etc/systemd/system.conf.d/.conf/etc/systemd/user.conf.d/.conf

其中system.conf是系統實例使用的,user.conf是用戶實例使用的。

 

 

例如:解除 Linux 系統的最大進程數和最大文件打開數限制: 

 

vi /etc/security/limits.conf 

# 添加如下的行 

* soft noproc 20000  #軟連接  

* hard noproc 20000  #硬連接 

* soft nofile 4096   

* hard nofile 4096 

說明:* 代表針對所有用戶,noproc 是代表最大進程數,nofile 是代表最大文件打開數

 

需要注意一點:/etc/security/limits.d下也有noproc最大進參數的限制:

/etc/security/limits.d/ 下的文件覆蓋了/etc/security/limits.conf設置的值

 

 

針對用戶

 

針對用戶永久生效:

那么,是否有針對某個具體用戶的資源加以限制的方法呢?答案是有的,方法是通過修改系統的 /etc/security/limits.conf配置文件。該文件不僅能限制指定用戶的資源使用,還能限制指定組的資源使用。該文件的每一行都是對限定的一個描述。

limits.conf的格式如下:

<domain>                  <type>      <item>     <value> 

username|@groupname       type       resource   limit

domainusername|@groupname設置需要被限制的用戶名,組名前面加@和用戶名區別。也可以用通配符*來做所有用戶的限制。

type softhard -soft 指的是當前系統生效的設置值。hard 表明系統中所能設定的最大值。soft 的最大值不能超過hard的值。用就表明同時設置了 soft hard 的值。

 

 

cat /etc/systemd/system/sshd.service

 

/usr/sbin/sshd -D -R 是什么意思

"/usr/sbin/sshd -D -R" 是一個啟動 SSH 服務器的命令。其中:

"/usr/sbin/sshd" 表示使用該路徑下的 sshd 程序來啟動 SSH 服務器;

"-D" 表示在啟動后不要以守護進程方式運行(即不要后臺運行),而是在當前終端窗口中顯示運行日志和錯誤信息;

"-R" 表示在啟動時開啟遠程端口轉發功能,即允許通過 SSH 通道傳輸網絡數據。

 

 

sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups

這是一條系統日志,表示 SSH 服務器正在以后臺模式(-D)啟動,并且監聽了一個或多個端口(listener)。后面的“0 of 10-100 startups”表示該服務已經啟動了0次,但是它可能會在10100次之間被重啟。這通常是因為系統管理員設置了自動重啟機制,以確保 SSH 服務器在意外崩潰或其他故障時能夠自動恢復。

 

 

cat /proc/`pidof dockerd`/limits |grep files

 

sshd: root@notty 限制了 max openfile

 

 

網上的大部分文章都只提到了使用 ulimit命令或者修改 limits.conf文件來實現修改 open files配置,但是通過細心查看發現 PAM可能跟這個配置項也有關。PAMPluggable Authentication Modules,可插拔認證模塊。簡而言之,一種高層次的統一安全認證機制。再查閱資料后發現,openssh也是支持 PAM的。

 

 

 

 

 

必備工具

pstree -sp 1385226 | wc -l
48

 

apt-get install psmisc

yum  install psmisc -y

pstree -sp <pid>  很好用

//blog.hsojo.com/post/jie-jue-ssh-session-zhong-open-files-xian-zhi-wen-ti/

分析升級 OpenSSH Linux open files配置不生效問題

解決 SSH Session open files 限制問題

 

 

0條評論
作者已關閉評論
Top123
32文章數
3粉絲數
Top123
32 文章 | 3 粉絲
Top123
32文章數
3粉絲數
Top123
32 文章 | 3 粉絲
原創

超大集群max-open-file問題排查方法

2024-09-25 09:31:58
30
0

max-open-file問題排查

 

問題現象

 

[ERROR] HCCP(10460,all_reduce_test):2024-08-02-13:38:15.724.370 [rs_socket.c:570]tid:10497,rs_epoll_event_listen_in_handle(570) : IP:10.241.16.13 accept() failed ! errno:24
[ERROR]
 HCCP(10460,all_reduce_test):2024-08-02-13:38:15.724.404 [rs_socket.c:570]tid:10497,rs_epoll_event_listen_in_handle(570) : IP:10.241.16.13 accept() failed ! errno:24

 

問題現象1 同時運行128臺服務器,拋出如上錯誤,通過二分法查出,當同時運行小于124節點,正常運行;當大于等于124個節點,就拋出這一個錯誤,看起來和節點數有關系。

 

問題現象2迷惑點在于, 有的進程limit是很大(1048576) 有的進程limit進程很小,被限制住了是1024 ,是服務器配置不一樣導致的嗎?

 

全局沒有限制

  

進程級有限制


 每個進程又啟動6個子進程 那么一共有6X8=48個子進程


 

通過pstree 查看進程樹,之后一層層的看每個進程的limits   限制

[root@ccseagent-8fff4b8c1c /]# cat /proc/6300/limits  | grep "Max open files"

Max open files            1024                 524288               files

[root@ccseagent-8fff4b8c1c /]#

 

[root@ccseagent-8fff4b8c1c /]# cat /proc/xxx/limits  | grep "Max open files"

Max open files            1024                 524288               files

[root@ccseagent-8fff4b8c1c /]#

 

驗證方法1

 

[root@ccseagent-8fff4b8c1c /]# cat /proc/sys/fs/nr_open

1073741816

[root@ccseagent-8fff4b8c1c /]#

 

解決動態修改/proc/{pid}/limits

 

動態修改方式1

echo - n "Max open files=65535:65535" > /proc/6300/limits

 

動態修改方式2

prlimit --nofile=65536:65536 --pid 6300

 

當動態修改之后,發現立馬就不再報錯了,可以正常出結果了,說明確實是因為max-open-file導致的。

但是是誰限制住了max-open-file ,并且限制住在1024還不知道。

驗證方法2

 

本人日常開發流程中常使用 PyCharm 中的 Remote Interpreter,其通過 SSH 連接到基于 systemD 的容器環境,長時間運行項目后會出現 OSError: [Errno 24] Too many open files。雖然這個問題一定程度上可能與業務代碼有關,但默認限制允許單進程打開的文件數量(1024)屬實也太低了,多線程場景下會超出限制也是常有的事情。

 

看了這個博客才知道,和我們的現象是一致的。

原來:

# cat  /etc/pam.d/sshd | grep pam_limits.so

session    required     pam_limits.so

 

修改后:(注釋掉了)

sed -i '/pam_limits.so/s/^/#/' /etc/pam.d/sshd

# cat  /etc/pam.d/sshd | grep pam_limits.so

#session    required     pam_limits.so

 

看來很多,越來越多的信息指向了PAM模塊。和PAM有千絲萬縷的聯系。

 

排查過程

[root@ccseagent-8fff4b8c1c /]# ulimit -a

 

[root@ccseagent-8fff4b8c1c /]# ulimit -c

unlimited

[root@ccseagent-8fff4b8c1c /]#

 

[root@ccseagent-8fff4b8c1c /]# cat /proc/sys/fs/file-max

10485760

[root@ccseagent-8fff4b8c1c /]#

 

[root@ccseagent-8fff4b8c1c /]# cat /etc/security/limits.conf

*                soft    nofile         655350

*                hard    nofile         655350

*                soft    nproc          65535

*                hard    nproc          65535

[root@ccseagent-8fff4b8c1c /]#

 

 

Centos7 & ubuntu 系統中,使用Systemd替代了之前的SysV/etc/security/limits.conf文件的配置作用域縮小了。

/etc/security/limits.conf的配置,只適用于通過PAM認證登錄用戶的資源限制,它對systemdservice的資源限制不生效。因此登錄用戶的限制,通過/etc/security/limits.conf/etc/security/limits.d下的文件設置即可。

 

對于systemd service的資源設置,則需修改全局配置:

l   /etc/systemd/system.conf

l   /etc/systemd/user.conf

同時也會加載兩個對應目錄中的所有.conf文件/etc/systemd/system.conf.d/.conf/etc/systemd/user.conf.d/.conf

其中system.conf是系統實例使用的,user.conf是用戶實例使用的。

 

 

例如:解除 Linux 系統的最大進程數和最大文件打開數限制: 

 

vi /etc/security/limits.conf 

# 添加如下的行 

* soft noproc 20000  #軟連接  

* hard noproc 20000  #硬連接 

* soft nofile 4096   

* hard nofile 4096 

說明:* 代表針對所有用戶,noproc 是代表最大進程數,nofile 是代表最大文件打開數

 

需要注意一點:/etc/security/limits.d下也有noproc最大進參數的限制:

/etc/security/limits.d/ 下的文件覆蓋了/etc/security/limits.conf設置的值

 

 

針對用戶

 

針對用戶永久生效:

那么,是否有針對某個具體用戶的資源加以限制的方法呢?答案是有的,方法是通過修改系統的 /etc/security/limits.conf配置文件。該文件不僅能限制指定用戶的資源使用,還能限制指定組的資源使用。該文件的每一行都是對限定的一個描述。

limits.conf的格式如下:

<domain>                  <type>      <item>     <value> 

username|@groupname       type       resource   limit

domainusername|@groupname設置需要被限制的用戶名,組名前面加@和用戶名區別。也可以用通配符*來做所有用戶的限制。

type softhard -soft 指的是當前系統生效的設置值。hard 表明系統中所能設定的最大值。soft 的最大值不能超過hard的值。用就表明同時設置了 soft hard 的值。

 

 

cat /etc/systemd/system/sshd.service

 

/usr/sbin/sshd -D -R 是什么意思

"/usr/sbin/sshd -D -R" 是一個啟動 SSH 服務器的命令。其中:

"/usr/sbin/sshd" 表示使用該路徑下的 sshd 程序來啟動 SSH 服務器;

"-D" 表示在啟動后不要以守護進程方式運行(即不要后臺運行),而是在當前終端窗口中顯示運行日志和錯誤信息;

"-R" 表示在啟動時開啟遠程端口轉發功能,即允許通過 SSH 通道傳輸網絡數據。

 

 

sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups

這是一條系統日志,表示 SSH 服務器正在以后臺模式(-D)啟動,并且監聽了一個或多個端口(listener)。后面的“0 of 10-100 startups”表示該服務已經啟動了0次,但是它可能會在10100次之間被重啟。這通常是因為系統管理員設置了自動重啟機制,以確保 SSH 服務器在意外崩潰或其他故障時能夠自動恢復。

 

 

cat /proc/`pidof dockerd`/limits |grep files

 

sshd: root@notty 限制了 max openfile

 

 

網上的大部分文章都只提到了使用 ulimit命令或者修改 limits.conf文件來實現修改 open files配置,但是通過細心查看發現 PAM可能跟這個配置項也有關。PAMPluggable Authentication Modules,可插拔認證模塊。簡而言之,一種高層次的統一安全認證機制。再查閱資料后發現,openssh也是支持 PAM的。

 

 

 

 

 

必備工具

pstree -sp 1385226 | wc -l
48

 

apt-get install psmisc

yum  install psmisc -y

pstree -sp <pid>  很好用

//blog.hsojo.com/post/jie-jue-ssh-session-zhong-open-files-xian-zhi-wen-ti/

分析升級 OpenSSH Linux open files配置不生效問題

解決 SSH Session open files 限制問題

 

 

文章來自個人專欄
文章 | 訂閱
0條評論
作者已關閉評論
作者已關閉評論
0
0