Ошибка «504 Gateway Time-out» при обновлении nextcloud

Задача:
---------------------------------------------------------------Выявить причину возникновения ошибки «504 Gateway Time-out» и найти варианты решения
Ошибка появилась при попытке обновить nextcloud при помощи веб-интерфейса.

Дословно ошибка «504 Gateway Time-out», означает, что превышено время ожидания ответа от сервера. Из сообщения понятно, что используется веб-сервер nginx. В эту сторону и будем копать. Авторизуемся на сервере при помощи SSH и собираем информацию:
root@cloud:/ # uname -a FreeBSD cloud 12.0-RELEASE FreeBSD 12.0-RELEASE r341666 GENERIC amd64
На сервере операционная система FreeBSD. Это необходимо знать, чтобы понять как дальше действовать, так как команды могут различаться. Это не имеет отношении к проблеме, но проверяем историю входов в систему, и последнюю перезагрузку. Мало ли кто тут был )
root@cloud:/ # last ncuser pts/0 192.168.1.231 Mon Apr 27 00:59 still logged in ncuser pts/0 192.168.1.231 Sun Apr 19 19:07 - 01:37 (06:30) ncuser pts/0 192.168.1.231 Sun Apr 19 15:12 - 15:28 (00:16) ncuser pts/0 192.168.1.231 Sat Apr 18 01:26 - 02:20 (00:53)
Проверяем 10 самых ресурсоёмких приложения в данный момент
root@cloud:/ # top -n 10
last pid: 24968; load averages: 0.44, 0.32, 0.26 up 34+05:36:03 01:06:28
51 processes: 1 running, 49 sleeping, 1 stopped
CPU: 2.0% user, 0.0% nice, 0.5% system, 0.0% interrupt, 97.5% idle
Mem: 857M Active, 5269M Inact, 618M Laundry, 1115M Wired, 579M Buf, 262M Free
ARC: 2105K Total, 808K MFU, 1158K MRU, 32K Anon, 18K Header, 86K Other
216K Compressed, 1846K Uncompressed, 8.55:1 Ratio
Swap: 1024M Total, 673M Used, 351M Free, 65% Inuse
PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
24958 root 1 23 0 58M 21M select 0 0:19 5.96% rsync
984 mysql 37 20 0 1470M 1148M select 1 262:08 0.00% mysqld
787 redis 4 20 0 17M 5296K kqread 2 86:46 0.00% redis-server
51562 www 1 52 0 265M 54M accept 2 29:22 0.00% php-fpm
52711 www 1 52 0 265M 56M accept 0 28:38 0.00% php-fpm
120 root 3 20 0 33M 4164K select 0 28:37 0.00% vmtoolsd
808 www 1 20 0 29M 9240K kqread 1 23:55 0.00% nginx
52426 www 1 52 0 329M 118M accept 0 23:18 0.00% php-fpm
51412 www 1 29 0 329M 122M accept 3 22:51 0.00% php-fpm
52712 www 1 21 0 329M 75M accept 0 20:34 0.00% php-fpm
Из всей информации видно, что мало swap. Если в нормальном состоянии используется 65%, есть большой шанс, что при большей нагрузки памяти не хватает. Проверим ещё раз информацию о SWAP
root@cloud:/ # swapinfo Device 1K-blocks Used Avail Capacity /dev/da0s1b 1048544 689440 359104 66% root@cloud:/ # swapinfo -h Device 1K-blocks Used Avail Capacity /dev/da0s1b 1048544 673M 351M 66% root@cloud:/ #
Ищем сообщения об ошибках в системе
root@cloud:/ # dmesg | grep swap swap_pager_getswapspace(31): failed swap_pager_getswapspace(16): failed root@cloud:/ # root@cloud:/ # cat /var/log/messages | grep swap Apr 24 23:10:57 cloud kernel: swap_pager_getswapspace(31): failed Apr 24 23:10:57 cloud kernel: swap_pager_getswapspace(16): failed
Проверяем сколько установлено оперативной памяти на сервере
root@cloud:/ # sysctl hw.physmem
hw.physmem: 8549543936
root@cloud:/ # grep memory /var/run/dmesg.boot
real memory = 8589934592 (8192 MB)
avail memory = 8274640896 (7891 MB)
VMware memory control driver initialized
root@cloud:/ # sysctl -n hw.physmem | awk '{ byte =$1 /1024/1024/1024; print byte " GB" }'
7.96238 GB
root@cloud:/ #
Логично, что исходя из формулы «swap=2*ОЗУ» раздел SWAP должен быть 16 GB. Но не факт что при памяти в 128 GB, необходимо устанавливать SWAP в 256 GB. Это спорный и всегда открытый вопрос.
Смотрим информацию о дисках и имеющихся разделах.
ot@cloud:/ # df -H
Filesystem Size Used Avail Capacity Mounted on
/dev/da0s1a 20G 17G 1.0G 94% /
devfs 1.0k 1.0k 0B 100% /dev
/dev/da1p1 4.8T 2.6T 1.8T 59% /mnt/da1p1
zroot/docker 3.9G 24k 3.9G 0% /usr/docker
zroot 3.9G 24k 3.9G 0% /zroot
root@cloud:/ # swapctl -lhs
Device: Bytes Used:
/dev/da0s1b 1.0G 673M
Total: 1.0G 673M
root@cloud:/ # gpart show
=> 63 41942977 da0 MBR (20G)
63 1 - free - (512B)
64 41942976 1 freebsd [active] (20G)
=> 0 41942976 da0s1 BSD (20G)
0 39845888 1 freebsd-ufs (19G)
39845888 2097088 2 freebsd-swap (1.0G)
=> 40 9663676336 da1 GPT (4.5T)
40 9663676336 1 freebsd-ufs (4.5T)
root@cloud:/ #
Виртуальный системный диск имеет размер 20 GB. Так как это виртуальный сервер на ESXi, заходим в панель администрирования ESXI и увеличиваем его до 30 GB. После сервер необходимо перезагрузить.
Подключаемся и проверяем
root@cloud:/ # gpart show
=> 63 62914497 da0 MBR (30G)
63 1 - free - (512B)
64 41942976 1 freebsd [active] (20G)
41943040 20971520 - free - (10G)
=> 0 41942976 da0s1 BSD (20G)
0 39845888 1 freebsd-ufs (19G)
39845888 2097088 2 freebsd-swap (1.0G)
=> 40 9663676336 da1 GPT (4.5T)
40 9663676336 1 freebsd-ufs (4.5T)
Расширяем место в разделе FreeBSD и проверяем проделанное.
root@cloud:/ # gpart resize -i 1 da0
da0s1 resized
root@cloud:/ # gpart show da0
=> 63 62914497 da0 MBR (30G)
63 1 - free - (512B)
64 62914496 1 freebsd [active] (30G)
root@cloud:/ #
И так на данный момент имеем SWAP размеров в 1 GB, который будем увеличивать до 8 и остальное место отдадим для системы.
Отключаем SWAP
root@cloud:/ # swapinfo Device 1K-blocks Used Avail Capacity /dev/da0s1b 1048544 0 1048544 0% root@cloud:/ # swapoff /dev/da0s1b root@cloud:/ # swapinfo Device 1K-blocks Used Avail Capacity root@cloud:/ #
Удаляем SWAP и проверяем
root@cloud:/ # gpart delete -i 2 da0s1
da0s1b deleted
root@cloud:/ # gpart show
=> 63 62914497 da0 MBR (30G)
63 1 - free - (512B)
64 62914496 1 freebsd [active] (30G)
=> 0 62914496 da0s1 BSD (30G)
0 39845888 1 freebsd-ufs (19G)
39845888 23068608 - free - (11G)
=> 40 9663676336 da1 GPT (4.5T)
40 9663676336 1 freebsd-ufs (4.5T)
root@cloud:/ #
Редактируем vi /etc/fstab
vi /etc/fstab
комментируем строку относящуюся к SWAP
# Device Mountpoint FStype Options Dump Pass# /dev/da0s1a / ufs rw 1 1 #/dev/da0s1b none swap sw 0 0 /dev/da1p1 /mnt/da1p1 ufs rw 0 0 #/dev/da2p1 /mnt/da2p1 ufs rw 0 0
Перезагружаемся в «2. Boot Single user»

Убеждаемся в отсутствии свапа, и проверяем разделы на диске

Увеличиваем размер диска до 22G
gpart resize -i 1 -a 4k -s 22G da0s1

Создаём свап на оставшемся свободном диске
gpart add -t freebsd-swap -a 4k da0s1

Убираем изменения в файле /etc/fstab и перезагружаемся. Если не получилось, перезагружаемся и тогда изменяем fstab и ещё раз перезагружаемся.
Проверяем что всё сделано правильно
root@cloud:/ # swapinfo
Device 1K-blocks Used Avail Capacity
/dev/da0s1b 8388576 0 8388576 0%
root@cloud:/ # gpart show
=> 63 62914497 da0 MBR (30G)
63 1 - free - (512B)
64 62914496 1 freebsd [active] (30G)
=> 0 62914496 da0s1 BSD (30G)
0 46137344 1 freebsd-ufs (22G)
46137344 16777152 2 freebsd-swap (8.0G)
=> 40 9663676336 da1 GPT (4.5T)
40 9663676336 1 freebsd-ufs (4.5T)
root@cloud:/ #

1 комментарий
[…] хватает ли ресурсов серверу. Об этом читаем тут: “Ошибка “504 Gateway Time-out” при обновлении nextcloud” если у вас используется связка nginx, php-fpm и apache, то вы […]