
После нескольких часов тестирования я обнаружил, что клиент синхронизации рабочего стола 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
Благодаря этому вы можете ограничить общее использование процессора пользователем, чтобы избежать сбоев сервера из-за плохих настроек приложения.