Ограничение ЦП и советы по использованию kswapd0

Ограничение ЦП и советы по использованию kswapd0

После нескольких часов тестирования я обнаружил, что клиент синхронизации рабочего стола nextcloud для Ubuntu 20.04 (appimage или ppa) похоже, имеет ошибку, из-за которой... если происходит обычная ошибка синхронизации файлов nextcloud, kswapd0 резко повышает нагрузку на ЦП до 100%, а файл подкачки на сервере Debian 10.5 полностью заполняется. (clamscan также повышает нагрузку на 45–100% во время подъема kswapd0 до 100% ЦП). Другие мои клиенты синхронизации не вызывают этой проблемы (мобильные, собственные «онлайн-аккаунты» Ubuntu).

верхний вывод команды

top - 16:08:59 up 22 min,  2 users,  load average: 89.42, 84.04, 55.66
Tasks: 378 total,  12 running, 359 sleeping,   0 stopped,   7 zombie
%Cpu(s):  3.4 us, 57.0 sy,  0.0 ni,  0.1 id, 39.5 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   3946.8 total,     90.2 free,   3766.4 used,     90.1 buff/cache
MiB Swap:   6144.0 total,      0.0 free,   6144.0 used.      4.9 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND           
   36 root      30  10       0      0      0 R  98.3   0.0  12:43.68 kswapd0           
 1691 mysql     20   0 1739540   2376      0 S   3.9   0.1   0:34.59 mysqld            
 1300 root      10 -10  116752   3400      0 D   3.3   0.1   0:41.96 AliYunDun         
 1544 root      20   0  806108    640      0 D   2.4   0.0   0:09.45 aliyun-service    
  161 root      20   0    4556   1904   1844 S   0.9   0.0   0:10.60 plymouthd         
 2746 git       20   0 1374728   6020      0 S   0.7   0.1   0:07.23 gitea             
 1114 root      20   0   24312    284      0 S   0.5   0.0   0:03.74 AliYunDunUpdate   
 5805 web2      20   0  292472 215456    920 D   0.4   5.3   0:05.43 clamscan          
  155 root       0 -20       0      0      0 I   0.3   0.0   0:07.11 kworker/0:1H-kbl+ 
  232 root      20   0   70888    284     88 D   0.3   0.0   0:03.74 systemd-journal   
  936 memcache  20   0  408168      0      0 S   0.3   0.0   0:02.19 memcached         
 3492 root      20   0   11380    756    556 R   0.3   0.0   0:03.28 top               
    1 root      20   0  170192   2972      0 D   0.3   0.1   0:11.03 systemd           
 1041 redis     20   0   54244    428      0 D   0.3   0.0   0:03.28 redis-server      
 4029 www-data  20   0  339376   2436     16 D   0.3   0.1   0:00.85 /usr/sbin/apach

Я пробовал использовать nice и cpulimit, чтобы не дать kswapd0 достичь 100% и полностью израсходовать память подкачки, но kswapd0, похоже, просто выполняет обе команды, независимо от того, запущены ли они по отдельности или одновременно, и потребляет 100% ресурсов ЦП и подкачки, не оставляя мне выбора, кроме как перезагрузить сервер, чтобы очистить кэш подкачки.

Я уже снизил swapiness до нуля. И я пробовал:

To free pagecache:
    echo 1 > /proc/sys/vm/drop_caches
To free reclaimable slab objects (includes dentries and inodes):
    echo 2 > /proc/sys/vm/drop_caches
To free slab objects and pagecache:
    echo 3 > /proc/sys/vm/drop_caches

Поскольку я предполагаю, что ошибки синхронизации файлов Nextcloud станут обычным явлением в будущем, может ли кто-нибудь подсказать, как можно смягчить / предотвратить остановку всего сервера из-за простой ошибки синхронизации файлов?

ОБНОВЛЯТЬ

После некоторых дополнительных тестов и чтения... похоже, что ClamAV запускает clamscan при каждой загрузке и отправке электронной почты, что резко увеличивает загрузку процессора до 100%. Связь с nextcloud в том, что у меня активирован антивирус для файлов. Поэтому мои загрузки синхронизации файлов также запускают clamscan, а затем перегружают сервер.

Решение, похоже, в том, чтобы прекратить использовать clamscan и вместо этого внедрить clamav-daemon. Я сейчас изучаю проблему, но если кто-то может мне подсказать, как перейти с clamscan на clamav-daemon. Я был бы признателен.

На данный момент я попробовал:

service clamd start
Failed to start clamd.service: Unit clamd.service not found.

И

# freshclam -d
ERROR: /var/log/clamav/freshclam.log is locked by another process
ERROR: Problem with internal logger (UpdateLogFile = /var/log/clamav/freshclam.log).
ERROR: initialize: libfreshclam init failed.
ERROR: Initialization error!

решение1

Хорошо... Я разобрался... проблема, указанная выше, была двойной: amavis запускал clamscan вместо clamd, в то время как антивирус nextcloud по умолчанию использовал clamscan вместо clamd.

Решение:

1.) #dpkg-reconfigure clamav-daemon <- По какой-то причине эта конфигурация не была постоянной, и система вернулась к исходному состоянию после перезагрузки. Для постоянного способа установки ограничения ЦП на clamscan на машинах Debian/Ubuntu добавьте:
CPUAccounting=true CPUQuota=X%в:
#nano /etc/systemd/system/clamav-daemon.service.d/extend.conf
2.) Измените антивирус nextcloud по умолчаниюотclamscanкдемон clamav (сокет)

Это решит ваши проблемы. Теперь nextcloud может иметь столько ошибок snyc, сколько захочет, не останавливая весь сервер.

Что-то полезное, но необязательное. Для тех, кто работает в среде общего хостинга с Debian/Ubuntu, где по умолчанию установлены systemd/cgroups. Я нашел отличный урок о том, как ограничить использование процессора пользователем:

https://www.webhostingtalk.com/showthread.php?t=1832382

Благодаря этому вы можете ограничить общее использование процессора пользователем, чтобы избежать сбоев сервера из-за плохих настроек приложения.

Связанный контент