systemd Sử dụng 4GB RAM sau 18 ngày hoạt động


14

Tôi có một máy chủ web chạy CentOS 7, trong đó quá trình systemd đang sử dụng gần 4 GB RAM sau vài tuần hoạt động. Việc sử dụng RAM đang tăng đều đặn ở mức khoảng 200MB mỗi ngày. Điều này và các quá trình liên quan như systemd-logind và dbus-daemon cũng sử dụng một khối lượng lớn CPU trong phần lớn thời gian. Máy chủ CentOS 6 khác của tôi sử dụng "init" thay vì systemd không sử dụng tài nguyên như vậy.

Trong ví dụ trên cùng, trong khi phục vụ web bình thường mà không có các tiến trình khác đang chạy, systemd, systemd-logind, systemd-Tạp chí và dbus-daemon sử dụng tổng cộng 10,7% CPU lõi tứ và systemd đang tiêu thụ 19% 16GB RAM của hệ thống. Đây không phải là hành vi bình thường và sau khi tìm kiếm xung quanh tôi không tìm thấy ai khác với vấn đề này. Điều gì có thể gây ra tài nguyên này ăn cắp? Mọi lơi đê nghị đêu nên được đanh gia cao.

Đầu ra từ đầu trong một khoảng thời gian nhàn rỗi (ngoại trừ phục vụ web):

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 

Chỉnh sửa 2-14-16

Tôi có thể đã tìm thấy một cái gì đó có liên quan trong đầu ra của "sudo tạp chí" (xem bên dưới). Có nhiều dòng xảy ra mỗi giây mỗi giờ liên quan đến các kết nối SSH từ một trong các máy chủ sản xuất khác của tôi. Đây là các quy trình rsync chuyển các tập tin từ máy chủ từ xa đến máy chủ được đề cập. Điều này hóa ra để giải thích việc sử dụng CPU của systemd, systemd-logind, NetworkManager và systemd-Tạp chí.

Tuy nhiên, điều này không thể giải thích sự rò rỉ bộ nhớ, đây là vấn đề lớn nhất. Kể từ khi bài viết gốc của bài đăng này vài ngày trước, systemd đã tăng từ 18,9% lên 21,4% mức sử dụng bộ nhớ hệ thống.

Nhật ký dưới đây đã được sửa đổi để thay thế tên miền thực và địa chỉ IP của các máy chủ.

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.

Cập nhật 2-16-16

Đây là đầu ra từ systemd-cgtop hiển thị việc sử dụng tài nguyên cho các nhóm điều khiển hoạt động (cuộn sang bên phải). Điều này cho thấy tất cả việc sử dụng tài nguyên nặng dưới đường dẫn "root". Điều này dường như không thu hẹp nó, nhưng có lẽ thông tin này có thể hữu ích.

Chỉ có 86 tệp phạm vi và các thư mục liên quan dưới / run / systemd / system /, tối đa 6 ngày. Có một vấn đề trong đó các tệp này bị mồ côi trong các kết nối SSH dẫn đến hàng ngàn mục nhập và tải CPU cao, nhưng điều đó không xảy ra ở đây.

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      -        -        -        -

Xóa bộ nhớ systemd tạm thời

Dường như việc chạy systemctl daemon-reexecsẽ giải phóng tất cả bộ nhớ được phân bổ cho quy trình PID 1. Tuy nhiên, sự rò rỉ vẫn tiếp tục. Một giải pháp ngăn chặn cho vấn đề này là đặt cron hàng ngày để xóa bộ nhớ, nhưng nó không khắc phục được sự rò rỉ. Tôi đã gửi một lỗi cho Redhat vì đây là phiên bản phát hành ổn định của systemd cho CentOS 7.x. Hy vọng rò rỉ có thể được tìm thấy và cắm.


Điều này có thể không liên quan, nhưng việc sử dụng / chạy đĩa hiện tại là gì?
Aaron

Bạn đã giữ cho hệ thống cập nhật?
Michael Hampton

@Aaron Hiện đang sử dụng 11% phân vùng 7GB / chạy. Không có phân vùng hệ thống cấp gốc nào gần đầy.
meridionaljet

3
Xin lỗi, chúng tôi không biết điều đó, vì nó không nằm trong câu hỏi của bạn.
Michael Hampton

4
Gần đây có một rò rỉ bộ nhớ liên quan đến PAM trong systemd khi sử dụng kích hoạt socket. Có thể là nó? github.com/systemd/systemd/issues/2187
Matt

Câu trả lời:


3

Kiểm tra theo dõi quá trình systemd cho các cuộc gọi mmap / mmunmap. Nó sẽ tiết lộ vấn đề:

yum cài đặt bước
bước đi -ff -p 1

Đó là một cách nhanh chóng và bẩn để chẩn đoán rò rỉ bộ nhớ. Bước tiến của quy trình systemd sẽ trông giống như:

recvmsg (23, {Trình_bảng uid = 0, gid = 0}}, dir_flags = MSG_CMSG_CLOEXEC}, MSG_DONTWAIT | MSG_CMSG_CLOEXEC) = 10
mở ("/ 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
đọc (20, "10: cpuset: / \ n9: perf_event: / \ n8: ôm" ..., 1024) = 164
đóng (20) = 0
munmap (0x7fcfd734e000, 4096) = 0

Nó phân bổ bộ nhớ, làm một cái gì đó, hơn là giải phóng bộ nhớ.
Kiểm tra dấu vết của các cuộc gọi hệ thống systemd, bạn sẽ khám phá nơi nó không thể kết thúc các cuộc gọi và giải phóng bộ nhớ được phân bổ.
Tôi cho rằng có một vấn đề với các hệ thống tập tin giả hoặc selinux được gắn không đúng, vì vậy systemd không thể kết thúc các cuộc gọi của nó.


Tôi đã thực hiện quy trình trước đó, nhưng đầu ra cho các cuộc gọi mmap rất mơ hồ (và rất nhiều) và cá nhân tôi không biết cách sử dụng nó để theo dõi rò rỉ tiềm năng.
meridionaljet

1
Tôi đã sửa đổi câu trả lời của mình với lời giải thích tốt hơn về việc sử dụng strace.
lắng

2
mặt trái của việc có công cụ init phức tạp
asdmin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.