Интеграция NextCloud и работа MOODLE с большими файлами

Re: Интеграция NextCloud и работа MOODLE с большими файлами

от Eugene Yascov -
Количество ответов: 6
Нет, памяти на сервере более чем достаточно и она ни разу не была вычерпана - в системе 32Gb, при тестовой загрузке гигабайтного файла меньше 12Gb свободной ни разу не было, своп вообще не дергается. Точную конфигурацию дисков сервера я уже не помню, но потестил скорость записи 2Gb файла, dd выдает 565Mb/s, так что ту мелочь, что мы туда закидываем, прожевывать должно мгновенно.

Настройки PHP, касающиеся файлов из того что знаю, стоят следующие:
upload_max_filesize = 2048M
post_max_size = 2048M
memory_limit = 2500M

В Nginx на прием тоже стоит 2048Mb

Сделал тест: закидывал файл на 500Мб и на гиг. Пока браузер показывает отправку файла, сервер вообще не дергается. Как только переваливает за 100%, начинает есть оперативку примерно на объем файла +/-, параллельно резко растет load average, для гигового дополз до 10, для 500Мб до 5-6. Потом память резко возвращается, а нагрузка медленно сходит на нет, а файл появляется прикрепленным в репозитории. Время на пост-обработку больше, чем на загрузку.

По поводу облака я писал выше, что разобрался - нужно обязательно линковать админскую учетку облака с OAuth 2 в мудле. Беда в том, что NC реально работает нестабильно, либо нестабильно работают OAuth 2 в мудле и сам плагин для NC, потому что линки периодически не открываются, не создаются, либо имеем дикие задержки при создании и открытии, при том что тут же может все работать мгновенно - с чем связано, не понятно. Плюс на одном сервере постоянно пишет, что время синхронизации учетки истекло и давай досвидание, при том что в OAuth 2 линковка отображается.
В ответ на Eugene Yascov

Re: Интеграция NextCloud и работа MOODLE с большими файлами

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

load_average считается как среднее за несколько секунд, поэтому нормально, что спадает оно плавно. Почему возрастает резко не знаю - возможно очень резко появляется ожидание какого-то ресурса.
Пока файл не закачасля полностью - php не работает, обработкой занимается nginx, он работает эффективно, память почти не потребляет. Как только файл полностью получен nginx - тот запускает php, передает ему полученный запрос - в этот момент резко увеличивается потребляемая оперативка, так как для php нужно, чтобы весь запрос был в памяти.

Помониторьте, что выдает в эти моменты iotop (запускать от root - показывает нагрузку на ввод/вывод). Возможно что-то с сетевыми соединениями, например, если у вас часть дисков сетевые.

Сразу после загрузки файла происходит вычисление его sha1-хэша, чтобы решить, куда его положить. Возможно этот процесс создает большую нагрузку

В ответ на Vadim Dvorovenko

Re: Интеграция NextCloud и работа MOODLE с большими файлами

от Eugene Yascov -
В топе мониторинга Iotop все время висит MySQL, т.к. на наши сервера мудла идут постоянно обращения, но там нагрузка на диски небольшая, в редких пиках до 8Мб.
Во время загрузки файла нагрузка на диск вообще нулевая (точнее обычная) - видимо с моими настройками все пишется в память. А вот когда начинает расти load average, появляется пиковая нагрузка от нгинкс, потом от пхп-фпм и очень быстро еще от каких-то служб, но это секундная нагрузка. Для 350мегового файла максимум запись поднималась до 100Мб/c и длилась 1-2 секунды. А тупит он значительно дольше.
Расчет sha1-хэша для современного 32 ядерного проца это вообще не задача, чтобы он так запинался. Мой десктопный древний Q6600 для того же файла 7zip'ом считает sha1 за 2.5-3 секунды.
В ответ на Eugene Yascov

Re: Интеграция NextCloud и работа MOODLE с большими файлами

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
Действительно, у вас хорошее железо, и ресурсов достаточно. Скажите, в чём именно проявляется "вставание сервера колом", кроме больших цифр в top? У пользователей начинаются тормоза при загрузке страниц? Не настроен ли у вас вдруг антивирус, на уровне moodle или веб-сервера, может он сканирует файл?
Есть ли у вас какие-то нестандартные плагины, которые можно заподозрить?
Можете попробовать на несколько минут отключить cron, чтобы отсечь все версии с процессами, запускаемыми по расписанию.
Есть ли возможность по top или каким-то другим образом понять, какой именно процесс порождает большую нагрузку, чтобы понять это именно php, или что-то другое. Желательно понять, такую нагрузку создает один процесс, или несколько (а то какие-то слишком большие значения load average)
В момент загрузки помониторьте эту строчку у top
%Cpu(s): 0,5 us, 1,0 sy, 0,0 ni, 98,2 id, 0,3 wa, 0,0 hi, 0,0 si, 0,0 st
Особенно интересует значение перед wa - ожидание ввода/вывода, которое и может порождать большой load-average, к процессору скапливается очередь команд, а он не может их взять из-за того, что ожидает ввода/вывода. iotop показывает только ожидание диска, а сюда входит ещё и ожидание сети. Высокие значения могут быть, если moodledata/storage у вас по медленной сети или узкому каналу - в результате файл быстро кладется в tmp, быстро хэшируется, определяется его имя, а потом он очень медленно перемещается в moodledata. Проверьте скорость чтения и записи именно в moodledata/filedir.
В ответ на Vadim Dvorovenko

Re: Интеграция NextCloud и работа MOODLE с большими файлами

от Eugene Yascov -
Вставание колом заключается в том, что время отклика вырастает до минут, страницы очень медленно отдаются. Такой load average я видел раньше только когда наш мудл на старом сервере ботнет ддосил, но сейчас таких проблем нет.
Антивирусов нет, ни в системе, ни в мудле. Крон исполняется раз в 10-15 минут и точно не при чем, потому что проблема с большими файлами наблюдается всегда и он не мог каждый раз вмешиваться в этот процесс.
Хранилище у нас не сетевое, так что сеть не причем, у нас стоит 5 мудлов, каждый в своем докер контейнере (так сисадмин придумал), так что всё файло хранится локально.

В том то и проблема, что не получается по топу выловить виновника. Я не сисадмин, чтобы копать сильно глубже, умею лишь по вершкам и подсказкам из интернета.
Послежу за значением перед wa, потом отпишусь.

Вообще проблема с большими файлами стала каким-то загадочным откровением. Я 16 лет занимаюсь мудлом и вижу такое впервые. Раньше единственные серьезные тормоза были при переносе больших бэкапов курсов с мудла на мудл, но это всё списывалось на то, что процесс не из легких, а видимо уже тогда нужно было начинать разбираться.
В ответ на Eugene Yascov

Re: Интеграция NextCloud и работа MOODLE с большими файлами

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle
> Вставание колом
sync при наличии большого объема "грязного" кеша дает неприятный результат для дискового обмена.
Еще проблем может добавлять докер. В зависимости от дискового бекенда (aufs/overlayfs/lvm/btrfs) может быть существенная разница в производительности. doker это удобство и безопасность ценой производительности.
Рост LA - это индикатор конкуренции за процессор. LA > 1 говорит, что есть более одного активного (потребляюшего CPU) процесса стоящего в очереди.
Если что-то начинает жрать процессор, то perf может подсказать причину.
В ответ на Eugene Yascov

Re: Интеграция NextCloud и работа MOODLE с большими файлами

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
Всегда разворачивал moodle в обычных виртуалках (vmware), докер-контейнеры не использовал.
Тут нужно уточнять у вашего сисадмина, как всё сделано - так как докер подразумевает разделение функций между контейнерами, и на один moodle может приходиться 3-5 контейнеров (база данных, nginx, php, кэш, файловый storage), и всё общение между контейнеры идет через виртуальную сеть. Но ваш сисадмин мог поместить все пять функций внутри контейнера, поэтому без подробностей от него, и без его непосредственного участия выявить источник проблемы, скорее всего, не удастся.
Плюс возможно как-то докер лимитирует ресурсы на один конетйнер, чтобы другие не проседали и начинает резать ваш контейнер, чтобы он не мешал другим.
Если ваши конфиги докера не являются тайной, можете запостить их сюда. Даже если это не поможет решить вашу проблему, кто-то сможет на и примере настроить мудл в докере себе