rom*_*lym 9 python gevent flask gunicorn kubernetes
我正在运行一个带有工人阶级flask
的应用程序。在我自己的测试环境中,我按照官方指南设置worker编号。gunicorn
gevent
multiprocessing.cpu_count() * 2 + 1
如果我想将应用程序放在 Kubernetes 的 pod 上并假设资源如下
resources:
limits:
cpu: "10"
memory: "5Gi"
requests:
CPU: "3"
memory: "3Gi"
Run Code Online (Sandbox Code Playgroud)
如何计算工人数量?我应该使用限制 CPU 还是请求 CPU?
附言。我通过pyinstaller
本质上打包的二进制文件启动应用程序flask run(python script.py)
,并在主线程中启动gunicorn:
def run():
...
if config.RUN_MODEL == 'GUNICORN':
sys.argv += [
"--worker-class", "event",
"-w", config.GUNICORN_WORKER_NUMBER,
"--worker-connections", config.GUNICORN_WORKER_CONNECTIONS,
"--access-logfile", "-",
"--error-logfile", "-",
"-b", "0.0.0.0:8001",
"--max-requests", config.GUNICORN_MAX_REQUESTS,
"--max-requests-jitter", config.GUNICORN_MAX_REQUESTS_JITTER,
"--timeout", config.GUNICORN_TIMEOUT,
"--access-logformat", '%(t)s %(l)s %(u)s "%(r)s" %(s)s %(M)sms',
"app.app_runner:app"
]
sys.exit(gunicorn.run())
if __name__ == "__main__":
run()
Run Code Online (Sandbox Code Playgroud)
附言。无论是我设置的工人数量limits CPU (10*2+1=21)
还是requests CPU (3*2+1=7)
性能仍然达不到我的预期。在此问题下欢迎任何提高性能的尝试建议
如何计算工人数量?我应该使用限制 CPU 还是请求 CPU?
这取决于你的情况。首先,查看有关请求和限制的文档(这个示例是针对内存的,但对于CPU也是如此)。
如果 Pod 运行的节点有足够的可用资源,则容器可能(并且允许)使用比该
request
资源指定的资源更多的资源。然而,容器不允许使用超过其资源的资源limit
。例如,如果您
memory
为容器设置 256 MiB 的请求,并且该容器位于调度到具有 8GiB 内存的节点且没有其他 Pod 的 Pod 中,则该容器可以尝试使用更多 RAM。
memory
如果您为该容器 设置 4GiB 的限制,则 kubelet (和容器运行时)会强制执行该限制。运行时会阻止容器使用超过配置的资源限制。例如:当容器中的进程尝试消耗超过允许的内存量时,系统内核会终止尝试分配的进程,并出现内存不足 (OOM) 错误。
回答你的问题:首先,你需要知道你的应用程序需要多少资源(例如CPU)。请求将是应用程序必须接收的最小 CPU 量(您必须自己计算该值。换句话说 - 您必须知道应用程序需要多少最低 CPU 才能正常运行,然后您需要设置该值。)例如,如果您的应用程序在接收更多 CPU 时性能会更好,请考虑添加限制(这是应用程序可以接收的最大 CPU 量)。如果要按照最高性能计算worker数量,请使用limit
来计算该值。另一方面,如果您希望应用程序平稳运行(可能不是尽可能快,但会消耗更少的资源),请使用request
类型。
归档时间: |
|
查看次数: |
4191 次 |
最近记录: |