클라이언트가 서버에 터널링하고 데이터베이스에 연결할 수 있도록 pgbouncer 서버와 Open SSH 서버를 실행하는 컴퓨터가 있습니다.
이제 모든 클라이언트는 약 3분 동안 연결을 유지한 다음 연결이 닫힙니다. 보시다시피 아래 이미지는 실행 명령을 보여줍니다.
ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
단시간에 sshd 프로세스 수가 감소한다는 사실은 여러 번 강조되어 왔습니다.
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
158 158 790
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
150 150 750
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
146 146 730
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
140 140 700
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
140 140 700
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
140 140 700
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
140 140 700
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
136 136 680
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
132 132 660
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
132 132 660
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
132 132 660
sosepe@pgbouncer:~$ netstat -nt | grep :22
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
298 298 1490
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
324 324 1620
그러나 오랫동안은 아닙니다.
즉, 몇 시간 후에 명령을 다시 실행하면 실제로 프로세스 수가 증가한 것을 알 수 있습니다. 그 중 일부는 실제로 닫히지 않기 때문입니다.
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
324 324 1620
몇 시간 후 결과는 다음과 같습니다.
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
1926 1926 9630
결과는 다음과 같습니다.
Private + Shared = RAM used Program
4.0 KiB + 22.0 KiB = 26.0 KiB agetty
132.0 KiB + 27.5 KiB = 159.5 KiB vnstatd
128.0 KiB + 45.5 KiB = 173.5 KiB systemd-udevd
136.0 KiB + 65.0 KiB = 201.0 KiB cron
216.0 KiB + 33.0 KiB = 249.0 KiB tail
112.0 KiB + 239.5 KiB = 351.5 KiB systemd-timesyncd
504.0 KiB + 50.0 KiB = 554.0 KiB lvmetad
192.0 KiB + 481.5 KiB = 673.5 KiB vsftpd
908.0 KiB + 92.0 KiB = 1.0 MiB sudo
916.0 KiB + 103.0 KiB = 1.0 MiB pgbouncer
644.0 KiB + 604.0 KiB = 1.2 MiB vmtoolsd
1.3 MiB + 47.0 KiB = 1.3 MiB rsyslogd
1.2 MiB + 247.0 KiB = 1.5 MiB CloudEndure_Age (4)
1.4 MiB + 81.0 KiB = 1.5 MiB dbus-daemon
1.6 MiB + 331.0 KiB = 1.9 MiB su (4)
1.2 MiB + 892.0 KiB = 2.1 MiB VGAuthService
1.7 MiB + 582.0 KiB = 2.2 MiB collectd
2.7 MiB + 268.0 KiB = 3.0 MiB systemd-logind
2.9 MiB + 63.5 KiB = 3.0 MiB bash
4.3 MiB + 231.5 KiB = 4.5 MiB systemd-journald
2.7 MiB + 3.6 MiB = 6.2 MiB php-fpm7.3 (3)
4.8 MiB + 1.8 MiB = 6.6 MiB (sd-pam) (3)
6.5 MiB + 3.3 MiB = 9.8 MiB systemd (4)
5.8 MiB + 4.1 MiB = 9.9 MiB php-fpm7.2 (3)
5.7 MiB + 6.5 MiB = 12.2 MiB php-fpm5.6 (3)
16.1 MiB + 153.0 KiB = 16.3 MiB run_linux_migration_scripts_periodically (2)
17.2 MiB + 166.5 KiB = 17.3 MiB update_onprem_volumes (2)
18.5 MiB + 145.5 KiB = 18.6 MiB tailer (2)
11.8 MiB + 13.1 MiB = 24.9 MiB apache2 (11)
159.3 MiB + 180.0 KiB = 159.5 MiB java
741.6 MiB + 2.1 GiB = 2.8 GiB sshd (4469)
---------------------------------
3.1 GiB
=================================
SSHD는 거의 3GB의 메모리를 소비하며 이는 머신이 재부팅될 때까지 계속됩니다.
문제가 어디에 있는지에 대한 단서가 있습니까?
감사해요!
폴리스티렌
이것은 conf 파일입니다:
Port 10110
Protocol 1,2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
UsePrivilegeSeparation yes
SyslogFacility AUTHPRIV
LogLevel INFO
PermitRootLogin no
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
MACs hmac-md5,hmac-sha1,[email protected],hmac-ripemd160
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
[email protected],diffie-hellman-group-exchange-sha256,diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521
KexAlgorithms [email protected],diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521
PermitEmptyPasswords no
PasswordAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
GatewayPorts yes
ClientAliveInterval 600
PermitTunnel yes
MaxSessions 50
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem sftp /usr/libexec/openssh/sftp-server
답변1
Oracle Linux 및 Oracle Database를 실행하는 서버에서 동일한 동작을 수행하면서 sshd 서비스가 메모리가 부족하여 서버를 다시 시작해야 할 때까지 모든 메모리를 소비하고 있음을 확인했습니다. 우리는 이것이 Linux용 CIS 벤치마크를 구현했을 때만 시작된 것으로 의심합니다. 우리 시나리오에서는 Oracle 데이터베이스 인스턴스를 시작하면 sshd 서비스가 메모리를 사용하기 시작합니다. 현재 근본 원인이 발견될 때까지 sshd 서비스를 비활성화했습니다. 인증을 위해 PAM을 비활성화하려고 최선을 다했지만 소용이 없었습니다. 누군가가 이 문제의 원인을 찾길 바랍니다.