最近使用uwsgi部署项目。为了防止uwsgi进程占用内存越来越多,看到uwsgi有如下配置,但不知道它们之间的区别是什么?希望有高手解答一下。
limit-as
通过使用POSIX/UNIX的setrlimit()函数来限制每个uWSGI进程的虚拟内存使用数。
--limit-as 256
这个配置会限制uWSGI的进程占用虚拟内存不超过256M。如果虚拟内存已经达到256M,并继续申请虚拟内存则会使程序报内存错误,本次的http请求将返回500错误。
reload-on-as
当一个工作进程的虚拟内存占用超过了限制的大小,那么该进程就会被回收重用(重启)。
--reload-on-as 128
这个配置会重启所有占用虚拟内存超过128M的工作进程。当工作进程因此重启时,本次请求的响应不会受影响,返回正常结果。
reload-on-rss
跟reload-on-as的效果类似,不过这个选项控制的是物理内存。你可以同时使用这2个选项:
uwsgi:
reload-on-as: 128
reload-on-rss: 96
这个配置会导致所有占用128M以上虚拟内存或者超过96M物理内存的工作进程重启。
当工作进程因此重启时,本次请求的响应不会受影响,返回正常结果。
evil-reload-on-as
主进程会重启占用虚拟内存超过<n>M的工作进程。
evil-reload-on-rss
主要效果跟evil-reload-on-as一样,但是这个选项控制的是非共享物理内存。
根据你上面对每个参数的解释:
limit-as 和 reload-on-as 限制是的虚拟内存,区别是--limit-as不会重启worker进程,reload-on-as会重启worker进程。
evil-reload-on-rss 限制的是物理内存使用量,达到限制会重启worker进程
PS:
虚拟内存是什么:https://baike.baidu.com/item/...