我正在研究Rserve (1.8.5)的内置HTTP服务器,在从FastRWeb修改.http.request()之后。更新后的请求函数没有问题,但问题是,每当#并发请求很高时,一些/大多数请求就会抛出以下错误。
警告:fork_http()中的叉()失败:无法分配内存 警告:Rserve_prepare_child()中的叉()失败:无法分配内存
这是因为没有足够的空闲内存,因此有必要以某种方式限制#请求。
我尝试了几个客户层(1) Python的请求+拥抱库,(2) Python的pyRserve + hug库,其中# worker进程由#CPU调整。另外,我还在一个/多个容器设置(3) (4)中尝试了Nginx的反向代理。
在所有这些情况下,我观察到一些开销(~ 300到450 ms),与仅使用内置HTTP服务器的Rserve的设置相比。
我想使用它将是最有效的选择,但我担心它只是不断尝试分叉和返回一个错误。(除了快速抛出错误外,使用一些典型的度量标准(如CPU利用率或平均响应时间)也不容易自动缩放。)
有谁能告诉我们,是否有一种方法可以使用/不依赖另一个不牺牲性能的工具来执行速率限制?
我的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;
}
}
}发布于 2017-10-31 07:05:17
我被Locust (负载测试工具)误导,它显示了内置HTTP服务器设置Rserve的缓存输出。
手动调查显示,Rserve + Nginx返回的结果略有改进。
https://stackoverflow.com/questions/47012411
复制相似问题