Я изучаю встроенный HTTP-сервер Rserve (1.8.5) после изменения .http.request()
из FastRWeb. С обновленной функцией запроса все в порядке, но проблема в том, что всякий раз, когда # одновременных запросов много, некоторые/большинство из них выдают следующую ошибку.
ПРЕДУПРЕЖДЕНИЕ: сбой fork() в fork_http(): невозможно выделить память
ПРЕДУПРЕЖДЕНИЕ: ошибка fork() в Rserve_prepare_child(): невозможно выделить память
Это связано с недостатком оставшейся свободной памяти и необходимо # тем или иным образом ограничить запросы.
Я попробовал пару клиентских уровней (1) запросы Python + библиотеки Hug, (2) Python pyRserve + библиотеки Hug, где # рабочие процессы настраиваются # процессорами. Также я попробовал обратный прокси-сервер с Nginx как в настройке с одним, так и с несколькими контейнерами (3) (4).
Во всех случаях я наблюдаю некоторые накладные расходы (~ 300 - 450 мс) по сравнению с настройкой только Rserve со встроенным HTTP-сервером.
Я предполагаю, что использование его как есть было бы наиболее эффективным вариантом, но я обеспокоен тем, что он просто продолжает пытаться разветвляться и возвращает ошибку. (Кроме того, что ошибки возникают быстро, было бы непросто выполнить автоматическое масштабирование с некоторыми типичными показателями, такими как загрузка ЦП или среднее время отклика.)
Может ли кто-нибудь сообщить, есть ли способ принудительно ограничить скорость с помощью другого инструмента или без него, который не жертвует производительностью?
Моя конфигурация Rserve примерно следующая.
http.port 8000
socket /var/rserve/socket
sockmod 0666
control disable
Также здесь представлен упрощенный nginx.conf.
worker_processes auto;
events {
worker_connections 1024;
}
http {
upstream backend {
server 127.0.0.1:8000;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}