问题: out of pty devices

分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[root@VM_4_7_centos ~]# ls /dev/pt*
/dev/ptmx

/dev/pts:
0 1432 1868 2301 2737 3171 3606 4040 4476 4910 5345 5780 6214 665 7084 7519 7954
1 1433 1869 2302 2738 3172 3607 4041 4477 4911 5346 5781 6215 6650 7085 752 7955
10 1434 187 2303 2739 3173 3608 4042 4478 4912 5347 5782 6216 6651 7086 7520 7956
100 1435 1870 2304 274 3174 3609 4043 4479 4913 5348 5783 6217 6652 7087 7521 7957
1000 1436 1871 2305 2740 3175 361 4044 448 4914 5349 5784 6218 6653 7088 7522 7958
......
1416 1851 2286 2720 3155 3590 4024 446 4895 5329 5764 6199 6633 7068 7502 7938 997
1417 1852 2287 2721 3156 3591 4025 4460 4896 533 5765 62 6634 7069 7503 7939 998
1418 1853 2288 2722 3157 3592 4026 4461 4897 5330 5766 620 6635 707 7504 794 999
1419 1854 2289 2723 3158 3593 4027 4462 4898 5331 5767 6200 6636 7070 7505 7940 ptmx

[root@VM_4_7_centos ~]# ls /dev/pt*|wc -l
8357

[root@VM_4_7_centos ~]# lsof /dev/ptmx |head
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 19069 root 8u CHR 5,2 0t0 1121 /dev/ptmx
sshd 19069 root 12u CHR 5,2 0t0 1121 /dev/ptmx
sshd 19069 root 13u CHR 5,2 0t0 1121 /dev/ptmx
python 24505 www 6u CHR 5,2 0t0 1121 /dev/ptmx
python 24505 www 7u CHR 5,2 0t0 1121 /dev/ptmx
python 24505 www 8u CHR 5,2 0t0 1121 /dev/ptmx
python 24505 www 9u CHR 5,2 0t0 1121 /dev/ptmx
python 24505 www 11u CHR 5,2 0t0 1121 /dev/ptmx
python 24505 www 12u CHR 5,2 0t0 1121 /dev/ptmx
[root@VM_4_7_centos ~]# lsof /dev/ptmx |wc -l
8356

解决

1
2
[root@VM_4_7_centos ~]# echo "kernel.pty.max = 16384" >> /etc/sysctl.conf
[root@VM_4_7_centos ~]# sysctl -p

备注: 这个参数默认是1024,不知道walle这边为啥不释放,一直在增加,如果不重启服务器,在线解决只能修改kernel.pty.max参数。

说明pty - pseudoterminal interfaces A pseudoterminal (sometimes abbreviated “pty”) is a pair of virtual character devices that provide a bidirectional communication channel. One end of the channel is called the master; the other end is called the slave. The slave end of the pseudoterminal provides an interface that behaves exactly like a classical terminal. A process that expects to be connected to a terminal, can open the slave end of a pseudoterminal and then be driven by a program that has opened the master end. Anything that is written on the master end is provided to the process on the slave end as though it was input typed on a terminal.

Pseudoterminals are used by applications such as network login services (ssh(1), rlogin(1), telnet(1)), terminal emulators such as xterm(1), script(1), screen(1), tmux(1), unbuffer(1), and expect(1).

后续: 目前只是临时解决,这个参数默认是1024,不知道walle这边为啥不释放,一直在增加,如果不重启服务器,在线解决只能修改kernel.pty.max参数。后续更好的解决方案见github更进。