systemd ใช้ 4GB RAM หลังจากเวลาผ่านไป 18 วัน


14

ฉันมีเว็บเซิร์ฟเวอร์ที่ใช้งาน CentOS 7 ซึ่งกระบวนการ systemd ใช้ RAM เกือบ 4 GB หลังจากสองสามสัปดาห์ที่ผ่านมา การใช้ RAM เพิ่มขึ้นอย่างต่อเนื่องที่ประมาณ 200MB ต่อวัน กระบวนการนี้และกระบวนการที่เกี่ยวข้องเช่น systemd-logind และ dbus-daemon ยังใช้ CPU จำนวนมากในเวลาเดียวกัน เซิร์ฟเวอร์ CentOS 6 อื่น ๆ ของฉันที่ใช้ "init" แทน systemd ไม่มีการใช้ทรัพยากรดังกล่าว

ในตัวอย่างด้านบนด้านล่างในระหว่างการให้บริการเว็บปกติโดยไม่ต้องใช้กระบวนการอื่น ๆ systemd, systemd-logind, systemd-journal และ dbus-daemon ใช้ 10.7% รวมของ quad-core CPU และ systemd ใช้ 19% ของ RAM ขนาด 16GB ของระบบ นี่ไม่ใช่พฤติกรรมปกติและหลังจากค้นหาไปรอบ ๆ ฉันไม่พบใครที่มีปัญหานี้ สิ่งที่อาจทำให้เกิดการ hogging ทรัพยากรนี้ ข้อเสนอแนะใด ๆ ที่จะได้รับการชื่นชม

เอาท์พุทจากด้านบนในช่วงเวลาว่าง (ยกเว้นการให้บริการเว็บ):

top - 08:51:31 up 16 days, 13:43,  2 users,  load average: 1.84, 1.39, 1.07
Tasks: 297 total,   2 running, 295 sleeping,   0 stopped,   0 zombie
%Cpu(s):  5.6 us,  3.6 sy,  0.0 ni, 90.6 id,  0.1 wa,  0.0 hi,  0.1 si,  0.0 st
KiB Mem : 16212992 total,  2466564 free,  4275764 used,  9470664 buff/cache
KiB Swap:  4194300 total,  4070740 free,   123560 used. 10707392 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                          
  743 dbus      20   0   27104   1856   1152 S   3.3  0.0 304:27.19 dbus-daemon                                      
    1 root      20   0 3247784 2.920g   1800 S   3.0 18.9 287:41.35 systemd                                          
  737 root      20   0   27416   2524   1304 S   2.7  0.0 225:32.66 systemd-logind                                   
  736 root      20   0  434760   3756   3076 S   2.0  0.0 172:26.53 NetworkManager                                   
  548 root      20   0   82276  34652  34516 S   1.7  0.2 160:20.16 systemd-journal                                  
  770 polkitd   20   0  522920   2956   2248 S   1.7  0.0 120:06.11 polkitd                                          
  716 root      16  -4  116744   1368   1312 S   1.3  0.0  93:26.54 auditd                                           
 3778 nginx     20   0  446488  14688   6564 S   1.3  0.1   2:18.80 php-fpm                                          
 3847 nginx     20   0  446316  14588   6548 S   1.3  0.1   2:19.29 php-fpm                                          
 7000 nginx     20   0  446132  14400   6544 S   1.3  0.1   1:22.77 php-fpm                                          
14862 nginx     20   0  446304  14600   6580 S   1.3  0.1   1:32.25 php-fpm                                          
30333 nginx     20   0  446292  14468   6528 S   1.3  0.1   1:40.78 php-fpm                                          
  740 root      20   0  784980  20112  19696 S   1.0  0.1  76:12.69 rsyslogd                                         
 3521 nginx     20   0  446188  14848   6748 S   1.0  0.1   2:20.00 php-fpm                                          
 3687 nginx     20   0  446036  14688   6764 S   1.0  0.1   2:20.45 php-fpm                                          
 3689 nginx     20   0  446408  14604   6552 S   1.0  0.1   2:19.75 php-fpm                                          
 3774 nginx     20   0  446288  14568   6552 S   1.0  0.1   2:19.68 php-fpm                                          
 3836 nginx     20   0  447416  15572   6564 S   1.0  0.1   2:21.06 php-fpm                                          
 4861 nginx     20   0  446260  14576   6540 S   1.0  0.1   2:18.94 php-fpm                                          
 4862 nginx     20   0  446508  15084   6764 S   1.0  0.1   2:20.71 php-fpm                                          
13538 nginx     20   0  447204  15452   6572 S   1.0  0.1   1:32.33 php-fpm                                          
15530 nginx     20   0  446292  14520   6528 S   1.0  0.1   1:32.55 php-fpm                                          
28468 nginx     20   0  446356  14672   6568 S   1.0  0.1   1:42.21 php-fpm                                          
29564 nginx     20   0  446292  14536   6548 S   1.0  0.1   1:41.11 php-fpm                                          
30851 nginx     20   0  445956  14568   6748 S   1.0  0.1   1:49.66 php-fpm 

แก้ไข 2-14-16

ฉันอาจพบสิ่งที่เกี่ยวข้องในผลลัพธ์ของ "sudo journalctl" (ดูด้านล่าง) มีหลายบรรทัดที่เกิดขึ้นทุก ๆ ชั่วโมงในแต่ละครั้งเกี่ยวกับการเชื่อมต่อ SSH จากหนึ่งในเซิร์ฟเวอร์การผลิตอื่นของฉัน นี่เป็นกระบวนการ rsync ที่ถ่ายโอนไฟล์จากเซิร์ฟเวอร์ระยะไกลไปยังเซิร์ฟเวอร์ที่เป็นปัญหา สิ่งนี้จะอธิบายการใช้งาน CPU ของ systemd, systemd-logind, NetworkManager และ systemd-journal

อย่างไรก็ตามนี่ไม่สามารถอธิบายการรั่วไหลของหน่วยความจำซึ่งเป็นปัญหาที่ใหญ่ที่สุด เนื่องจากการเขียนโพสต์ต้นฉบับนี้เมื่อสองสามวันที่ผ่านมา systemd ได้เพิ่มขึ้นจากการใช้หน่วยความจำระบบ 18.9% เป็น 21.4%

บันทึกด้านล่างนี้ได้รับการแก้ไขเพื่อแทนที่ชื่อโดเมนจริงและที่อยู่ IP ของเซิร์ฟเวอร์

Feb 14 10:02:13 hostname.domain.com systemd-logind[737]: New session 6467482 of user tropicg9.
Feb 14 10:02:13 hostname.domain.com systemd[1]: Started Session 6467482 of user tropicg9.
Feb 14 10:02:13 hostname.domain.com systemd[1]: Starting Session 6467482 of user tropicg9.
Feb 14 10:02:13 hostname.domain.com sshd[9665]: pam_unix(sshd:session): session opened for user tropicg9 by (uid=0)
Feb 14 10:02:13 hostname.domain.com sshd[9667]: Received disconnect from 1.2.3.4: 11: disconnected by user
Feb 14 10:02:13 hostname.domain.com sshd[9665]: pam_unix(sshd:session): session closed for user tropicg9
Feb 14 10:02:13 hostname.domain.com systemd-logind[737]: Removed session 6467482.
Feb 14 10:02:14 hostname.domain.com sshd[9728]: Accepted publickey for tropicg9 from 1.2.3.4 port 45289 ssh2: RSA 0b:
Feb 14 10:02:14 hostname.domain.com systemd-logind[737]: New session 6467483 of user tropicg9.
Feb 14 10:02:14 hostname.domain.com systemd[1]: Started Session 6467483 of user tropicg9.
Feb 14 10:02:14 hostname.domain.com systemd[1]: Starting Session 6467483 of user tropicg9.
Feb 14 10:02:14 hostname.domain.com sshd[9728]: pam_unix(sshd:session): session opened for user tropicg9 by (uid=0)
Feb 14 10:02:14 hostname.domain.com sshd[9735]: Received disconnect from 1.2.3.4: 11: disconnected by user
Feb 14 10:02:14 hostname.domain.com sshd[9728]: pam_unix(sshd:session): session closed for user tropicg9
Feb 14 10:02:14 hostname.domain.com systemd-logind[737]: Removed session 6467483.
Feb 14 10:02:15 hostname.domain.com sshd[9876]: Accepted publickey for tropicg9 from 1.2.3.4 port 45290 ssh2: RSA 0b:
Feb 14 10:02:15 hostname.domain.com systemd-logind[737]: New session 6467484 of user tropicg9.
Feb 14 10:02:15 hostname.domain.com systemd[1]: Started Session 6467484 of user tropicg9.
Feb 14 10:02:15 hostname.domain.com systemd[1]: Starting Session 6467484 of user tropicg9.
Feb 14 10:02:15 hostname.domain.com sshd[9876]: pam_unix(sshd:session): session opened for user tropicg9 by (uid=0)
Feb 14 10:02:15 hostname.domain.com sshd[9883]: Received disconnect from 1.2.3.4: 11: disconnected by user
Feb 14 10:02:15 hostname.domain.com sshd[9876]: pam_unix(sshd:session): session closed for user tropicg9
Feb 14 10:02:15 hostname.domain.com systemd-logind[737]: Removed session 6467484.
Feb 14 10:02:20 hostname.domain.com sshd[10333]: Accepted publickey for tropicg9 from 1.2.3.4 port 45291 ssh2: RSA 0b
Feb 14 10:02:20 hostname.domain.com systemd-logind[737]: New session 6467485 of user tropicg9.
Feb 14 10:02:20 hostname.domain.com systemd[1]: Started Session 6467485 of user tropicg9.
Feb 14 10:02:20 hostname.domain.com systemd[1]: Starting Session 6467485 of user tropicg9.
Feb 14 10:02:20 hostname.domain.com sshd[10333]: pam_unix(sshd:session): session opened for user tropicg9 by (uid=0)
Feb 14 10:02:20 hostname.domain.com sshd[10342]: Received disconnect from 1.2.3.4: 11: disconnected by user
Feb 14 10:02:20 hostname.domain.com sshd[10333]: pam_unix(sshd:session): session closed for user tropicg9
Feb 14 10:02:20 hostname.domain.com systemd-logind[737]: Removed session 6467485.
Feb 14 10:02:21 hostname.domain.com sshd[10450]: Accepted publickey for tropicg9 from 1.2.3.4 port 45292 ssh2: RSA 0b
Feb 14 10:02:21 hostname.domain.com systemd-logind[737]: New session 6467486 of user tropicg9.
Feb 14 10:02:21 hostname.domain.com systemd[1]: Started Session 6467486 of user tropicg9.
Feb 14 10:02:21 hostname.domain.com systemd[1]: Starting Session 6467486 of user tropicg9.
Feb 14 10:02:21 hostname.domain.com sshd[10450]: pam_unix(sshd:session): session opened for user tropicg9 by (uid=0)
Feb 14 10:02:21 hostname.domain.com sshd[10457]: Received disconnect from 1.2.3.4: 11: disconnected by user
Feb 14 10:02:21 hostname.domain.com sshd[10450]: pam_unix(sshd:session): session closed for user tropicg9
Feb 14 10:02:21 hostname.domain.com systemd-logind[737]: Removed session 6467486.
Feb 14 10:02:22 hostname.domain.com sshd[10473]: Accepted publickey for tropicg9 from 1.2.3.4 port 45293 ssh2: RSA 0b
Feb 14 10:02:22 hostname.domain.com systemd-logind[737]: New session 6467487 of user tropicg9.
Feb 14 10:02:22 hostname.domain.com systemd[1]: Started Session 6467487 of user tropicg9.
Feb 14 10:02:22 hostname.domain.com systemd[1]: Starting Session 6467487 of user tropicg9.
Feb 14 10:02:22 hostname.domain.com sshd[10473]: pam_unix(sshd:session): session opened for user tropicg9 by (uid=0)
Feb 14 10:02:22 hostname.domain.com sshd[10475]: Received disconnect from 1.2.3.4: 11: disconnected by user
Feb 14 10:02:22 hostname.domain.com sshd[10473]: pam_unix(sshd:session): session closed for user tropicg9
Feb 14 10:02:22 hostname.domain.com systemd-logind[737]: Removed session 6467487.
Feb 14 10:02:23 hostname.domain.com sshd[10484]: Accepted publickey for tropicg9 from 1.2.3.4 port 45294 ssh2: RSA 0b
Feb 14 10:02:23 hostname.domain.com systemd-logind[737]: New session 6467488 of user tropicg9.
Feb 14 10:02:23 hostname.domain.com systemd[1]: Started Session 6467488 of user tropicg9.
Feb 14 10:02:23 hostname.domain.com systemd[1]: Starting Session 6467488 of user tropicg9.
Feb 14 10:02:23 hostname.domain.com sshd[10484]: pam_unix(sshd:session): session opened for user tropicg9 by (uid=0)
Feb 14 10:02:23 hostname.domain.com sshd[10486]: Received disconnect from 1.2.3.4: 11: disconnected by user
Feb 14 10:02:23 hostname.domain.com sshd[10484]: pam_unix(sshd:session): session closed for user tropicg9
Feb 14 10:02:23 hostname.domain.com systemd-logind[737]: Removed session 6467488.
Feb 14 10:02:39 hostname.domain.com sshd[10654]: Accepted publickey for tropicg9 from 1.2.3.4 port 45295 ssh2: RSA 0b
Feb 14 10:02:39 hostname.domain.com systemd[1]: Started Session 6467489 of user tropicg9.
Feb 14 10:02:39 hostname.domain.com systemd-logind[737]: New session 6467489 of user tropicg9.
Feb 14 10:02:39 hostname.domain.com systemd[1]: Starting Session 6467489 of user tropicg9.
Feb 14 10:02:39 hostname.domain.com sshd[10654]: pam_unix(sshd:session): session opened for user tropicg9 by (uid=0)
Feb 14 10:02:39 hostname.domain.com sshd[10656]: Received disconnect from 1.2.3.4: 11: disconnected by user
Feb 14 10:02:39 hostname.domain.com sshd[10654]: pam_unix(sshd:session): session closed for user tropicg9
Feb 14 10:02:39 hostname.domain.com systemd-logind[737]: Removed session 6467489.session 6467489.

อัปเดต 2-16-16

นี่คือผลลัพธ์จาก systemd-cgtop แสดงการใช้ทรัพยากรสำหรับกลุ่มควบคุมที่ใช้งานอยู่ (เลื่อนไปทางขวา) สิ่งนี้แสดงการใช้ทรัพยากรจำนวนมากทั้งหมดภายใต้พา ธ "รูท" ดูเหมือนจะไม่ทำให้แคบลง แต่ข้อมูลนี้อาจมีประโยชน์

มีไฟล์ขอบเขตเพียง 86 ไฟล์และไดเรกทอรีที่เกี่ยวข้องภายใต้ / run / systemd / system / อายุไม่เกิน 6 วัน มีปัญหาที่ไฟล์เหล่านี้ถูกกำพร้าในระหว่างการเชื่อมต่อ SSH ทำให้เกิดรายการหลายพันรายการและโหลดซีพียูสูง แต่นั่นไม่ได้เกิดขึ้นที่นี่

Path                                                                          Tasks   %CPU   Memory  Input/s Output/s

/                                                                               296   30.5    11.3G   657.8K   893.0K
/system.slice/NetworkManager.service                                              1      -        -        -        -
/system.slice/auditd.service                                                      1      -        -        -        -
/system.slice/crond.service                                                       1      -        -        -        -
/system.slice/dbus.service                                                        1      -        -        -        -
/system.slice/irqbalance.service                                                  1      -        -        -        -
/system.slice/lvm2-lvmetad.service                                                1      -        -        -        -
/system.slice/mariadb.service                                                     2      -        -        -        -
/system.slice/nginx.service                                                      10      -        -        -        -
/system.slice/php-fpm.service                                                   101      -        -        -        -
/system.slice/polkit.service                                                      1      -        -        -        -
/system.slice/postfix.service                                                     3      -        -        -        -
/system.slice/rsyslog.service                                                     1      -        -        -        -
/system.slice/smartd.service                                                      1      -        -        -        -
/system.slice/sshd.service                                                        2      -        -        -        -
/system.slice/system-getty.slice/getty@tty1.service                               1      -        -        -        -
/system.slice/systemd-journald.service                                            1      -        -        -        -
/system.slice/systemd-logind.service                                              1      -        -        -        -
/system.slice/systemd-udevd.service                                               1      -        -        -        -
/system.slice/tuned.service                                                       1      -        -        -        -
/system.slice/wpa_supplicant.service                                              1      -        -        -        -
/user.slice/user-1000.slice/session-7170741.scope                                 4      -        -        -        -

การล้างหน่วยความจำ systemd ชั่วคราว

ดูเหมือนว่าการทำงานsystemctl daemon-reexecจะปล่อยหน่วยความจำทั้งหมดที่จัดสรรให้กับกระบวนการ PID 1 อย่างไรก็ตามการรั่วไหลอย่างต่อเนื่อง วิธีแก้ปัญหาช่องว่างหยุดปัญหานี้คือการตั้ง cron รายวันเพื่อล้างหน่วยความจำ แต่มันไม่ได้แก้ไขการรั่วไหล ฉันได้ส่งข้อบกพร่องไปยัง Redhat เนื่องจากนี่เป็น systemd รุ่นที่เสถียรสำหรับ CentOS 7.x หวังว่าจะสามารถพบรอยรั่วและเสียบปลั๊กได้


สิ่งนี้อาจไม่เกี่ยวข้อง แต่การใช้ / เรียกใช้ดิสก์ (หน่วยความจำ) ปัจจุบันของอะไร /
แอรอน

คุณปรับปรุงระบบให้ทันสมัยอยู่เสมอหรือไม่?
Michael Hampton

@Aaron ปัจจุบันใช้ 11% ของพาร์ติชั่น 7GB / run ไม่มีพาร์ติชันระบบระดับรากที่อยู่ใกล้เต็ม
meridionaljet

3
ขออภัยเราไม่ทราบเพราะมันไม่ได้อยู่ในคำถามของคุณ
Michael Hampton

4
มีการรั่วไหลของหน่วยความจำที่เกี่ยวข้องกับ PAM ใน systemd เมื่อเร็ว ๆ นี้เมื่อใช้การเปิดใช้งานซ็อกเก็ต เป็นไปได้ไหม github.com/systemd/systemd/issues/2187
แมตต์

คำตอบ:


3

ตรวจสอบการติดตามของกระบวนการ systemd สำหรับการเรียก mmap / mmunmap ควรเปิดเผยปัญหา:

ยำติดตั้ง strace
strace -ff -p 1

เป็นวิธีที่รวดเร็วและสกปรกในการวิเคราะห์การรั่วไหลของหน่วยความจำ Strace ของกระบวนการ systemd ควรดูคล้ายกัน:

recvmsg (23, {msg_name (0) = NULL, msg_iov (1) = [{"WATCHDOG = 1", 4096}], msg_controllen = 32, {cmsg_len = 28, cmsg_level = SOL_SOCKET, cmsg_type = SCM_CREDENTIALS p = 620 uid = 0, gid = 0}}, msg_flags = MSG_CMSG_CLOEXEC}, MSG_DONTWAIT | MSG_CMSG_CLOEXEC) = 10
open ("/ proc / 620 / cgroup", O_RDONLY | O_CLOEXEC) = 20
fstat (20, {st_mode = S_IFREG | 0444, st_size = 0, ... }) = 0
mmap (NULL, 4096, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) = 0x7fcfd734e000
อ่าน (20, "10: cpuset: / \ n9: perf_event: / \ n8: กอด" ... , 1024) = 164
ปิด (20) = 0
munmap (0x7fcfd734e000, 4096) = 0

มันจัดสรรหน่วยความจำทำอะไรมากกว่าปล่อยหน่วยความจำ
การตรวจสอบการติดตามการเรียกของระบบ systemd ทำคุณควรค้นพบว่ามันไม่สามารถทำการโทรออกและปล่อยหน่วยความจำที่จัดสรรให้เสร็จ
ฉันคิดว่ามีปัญหากับการหลอกระบบไฟล์หรือ selinux ที่ติดตั้งอย่างไม่เหมาะสมดังนั้น systemd จึงไม่สามารถโทรออกได้


ฉันได้รัดขั้นตอนไว้ก่อนหน้า แต่ผลลัพธ์สำหรับการเรียก mmap นั้นคลุมเครือมาก (และมากมาย) และโดยส่วนตัวฉันไม่รู้วิธีใช้เพื่อติดตามการรั่วไหลที่อาจเกิดขึ้น
meridionaljet

1
ฉันแก้ไขคำตอบของฉันพร้อมคำอธิบายที่ดีขึ้นเกี่ยวกับการใช้ strace
anx

2
ด้านหลังของการมีเครื่องมือ init ที่ซับซ้อน
asdmin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.