[CPyUG] 在用uwsgi部署python程序的时候,每个uwsgi进程都会生成数G的内存,并且在没有任何流量的情况下也不释放

classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|

[CPyUG] 在用uwsgi部署python程序的时候,每个uwsgi进程都会生成数G的内存,并且在没有任何流量的情况下也不释放

范三山
之前把一个每日200w动态请求的应用从apache mod_wsgi 迁移到 nginx + uswgi
,请求处理也很简单,就是查一次数据库库,记一次日志。到了第二天以后发现内存飙升到100%,即使是没有任何请求的情况下。4个uwsgi进程每个都消耗了数G的内存,并且一直不释放,这会是什么方面的原因,我怀疑是与文件操作有关?

sudo pmap -d 11112
11112:   uwsgi -s /tmp/mars.sock -M -p 4 --env
DJANGO_SETTINGS_MODULE=settings -w
django.core.handlers.wsgi:WSGIHandler() --daemonize /var/log/uwsgi.log
Address           Kbytes Mode  Offset           Device    Mapping
0000000000400000     312 r-x-- 0000000000000000 008:00001 uwsgi
000000000064d000       4 r---- 000000000004d000 008:00001 uwsgi
000000000064e000      20 rw--- 000000000004e000 008:00001 uwsgi
0000000000653000      20 rw--- 0000000000000000 000:00000   [ anon ]
0000000000b14000 1029952 rw--- 0000000000000000 000:00000   [ anon ]
00007fe6cd866000   49156 rw--- 0000000000000000 000:00000   [ anon ]

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
        http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 在用uwsgi部署python程序的时候,每个uwsgi进程都会生成数G的内存,并且在没有任何流量的情况下也不释放

Zoom.Quiet
在 2011年9月14日 上午10:54,范三山 <[hidden email]> 写道:
> 之前把一个每日200w动态请求的应用从apache mod_wsgi 迁移到 nginx + uswgi
> ,请求处理也很简单,就是查一次数据库库,记一次日志。到了第二天以后发现内存飙升到100%,即使是没有任何请求的情况下。4个uwsgi进程每个都消耗了数G的内存,并且一直不释放,这会是什么方面的原因,我怀疑是与文件操作有关?
>

简单的方式,先配置 uWSGI 每1024 次请求后,就重启
    - 然后,检查代码吧,,,
    - 俺相信,只要你将应用的代码行数减少一半,这问题,一定不存在了,,

> sudo pmap -d 11112
> 11112:   uwsgi -s /tmp/mars.sock -M -p 4 --env
> DJANGO_SETTINGS_MODULE=settings -w
> django.core.handlers.wsgi:WSGIHandler() --daemonize /var/log/uwsgi.log
> Address           Kbytes Mode  Offset           Device    Mapping
> 0000000000400000     312 r-x-- 0000000000000000 008:00001 uwsgi
> 000000000064d000       4 r---- 000000000004d000 008:00001 uwsgi
> 000000000064e000      20 rw--- 000000000004e000 008:00001 uwsgi
> 0000000000653000      20 rw--- 0000000000000000 000:00000   [ anon ]
> 0000000000b14000 1029952 rw--- 0000000000000000 000:00000   [ anon ]
> 00007fe6cd866000   49156 rw--- 0000000000000000 000:00000   [ anon ]




--
人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
俺: http://about.me/zoom.quiet
文字协议: http://creativecommons.org/licenses/by-sa/2.5/cn/

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
        http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 在用uwsgi部署python程序的时候,每个uwsgi进程都会生成数G的内存,并且在没有任何流量的情况下也不释放

范三山
我发现一个愚蠢的错误。

我在代码里捕获一个小概率的时间,然后忘记去掉调试代码了............
import pdb
pdb.set_trace()

应该是这个问题,真是该死

在 2011年9月14日 上午11:07,Zoom.Quiet <[hidden email]> 写道:

> 在 2011年9月14日 上午10:54,范三山 <[hidden email]> 写道:
>> 之前把一个每日200w动态请求的应用从apache mod_wsgi 迁移到 nginx + uswgi
>> ,请求处理也很简单,就是查一次数据库库,记一次日志。到了第二天以后发现内存飙升到100%,即使是没有任何请求的情况下。4个uwsgi进程每个都消耗了数G的内存,并且一直不释放,这会是什么方面的原因,我怀疑是与文件操作有关?
>>
>
> 简单的方式,先配置 uWSGI 每1024 次请求后,就重启
>    - 然后,检查代码吧,,,
>    - 俺相信,只要你将应用的代码行数减少一半,这问题,一定不存在了,,
>
>> sudo pmap -d 11112
>> 11112:   uwsgi -s /tmp/mars.sock -M -p 4 --env
>> DJANGO_SETTINGS_MODULE=settings -w
>> django.core.handlers.wsgi:WSGIHandler() --daemonize /var/log/uwsgi.log
>> Address           Kbytes Mode  Offset           Device    Mapping
>> 0000000000400000     312 r-x-- 0000000000000000 008:00001 uwsgi
>> 000000000064d000       4 r---- 000000000004d000 008:00001 uwsgi
>> 000000000064e000      20 rw--- 000000000004e000 008:00001 uwsgi
>> 0000000000653000      20 rw--- 0000000000000000 000:00000   [ anon ]
>> 0000000000b14000 1029952 rw--- 0000000000000000 000:00000   [ anon ]
>> 00007fe6cd866000   49156 rw--- 0000000000000000 000:00000   [ anon ]
>
>
>
>
> --
> 人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
> 俺: http://about.me/zoom.quiet
> 文字协议: http://creativecommons.org/licenses/by-sa/2.5/cn/
>
> --
> 来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
> 发言: [hidden email]
> 退订: [hidden email] (向此发空信即退!)
> 详情: http://code.google.com/p/cpyug/wiki/PythonCn
> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
> 强烈: 建议使用技巧: 如何有效地报告Bug
>        http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
>

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
        http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 在用uwsgi部署python程序的时候,每个uwsgi进程都会生成数G的内存,并且在没有任何流量的情况下也不释放

范三山
然后我又想到一个问题,为什么这些内存是 anon
而不是在libpython里或者其他什么地方

在 2011年9月14日 上午11:11,范三山 <[hidden email]> 写道:

> 我发现一个愚蠢的错误。
>
> 我在代码里捕获一个小概率的时间,然后忘记去掉调试代码了............
> import pdb
> pdb.set_trace()
>
> 应该是这个问题,真是该死
>
> 在 2011年9月14日 上午11:07,Zoom.Quiet <[hidden email]> 写道:
>> 在 2011年9月14日 上午10:54,范三山 <[hidden email]> 写道:
>>> 之前把一个每日200w动态请求的应用从apache mod_wsgi 迁移到 nginx + uswgi
>>> ,请求处理也很简单,就是查一次数据库库,记一次日志。到了第二天以后发现内存飙升到100%,即使是没有任何请求的情况下。4个uwsgi进程每个都消耗了数G的内存,并且一直不释放,这会是什么方面的原因,我怀疑是与文件操作有关?
>>>
>>
>> 简单的方式,先配置 uWSGI 每1024 次请求后,就重启
>>    - 然后,检查代码吧,,,
>>    - 俺相信,只要你将应用的代码行数减少一半,这问题,一定不存在了,,
>>
>>> sudo pmap -d 11112
>>> 11112:   uwsgi -s /tmp/mars.sock -M -p 4 --env
>>> DJANGO_SETTINGS_MODULE=settings -w
>>> django.core.handlers.wsgi:WSGIHandler() --daemonize /var/log/uwsgi.log
>>> Address           Kbytes Mode  Offset           Device    Mapping
>>> 0000000000400000     312 r-x-- 0000000000000000 008:00001 uwsgi
>>> 000000000064d000       4 r---- 000000000004d000 008:00001 uwsgi
>>> 000000000064e000      20 rw--- 000000000004e000 008:00001 uwsgi
>>> 0000000000653000      20 rw--- 0000000000000000 000:00000   [ anon ]
>>> 0000000000b14000 1029952 rw--- 0000000000000000 000:00000   [ anon ]
>>> 00007fe6cd866000   49156 rw--- 0000000000000000 000:00000   [ anon ]
>>
>>
>>
>>
>> --
>> 人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
>> 俺: http://about.me/zoom.quiet
>> 文字协议: http://creativecommons.org/licenses/by-sa/2.5/cn/
>>
>> --
>> 来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
>> 发言: [hidden email]
>> 退订: [hidden email] (向此发空信即退!)
>> 详情: http://code.google.com/p/cpyug/wiki/PythonCn
>> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
>> 强烈: 建议使用技巧: 如何有效地报告Bug
>>        http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
>>
>

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
        http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 在用uwsgi部署python程序的时候,每个uwsgi进程都会生成数G的内存,并且在没有任何流量的情况下也不释放

Marlon Yao
动态分配的内存都映射到anon(anonymous memory mapping)。C语言中malloc分配的对象放在anon中,在python中对象的创建都是动态分配的(其它带垃圾回收的语言基本也是这样),都放在anon中。当然,局部变量会放在堆栈中。

2011/9/14 范三山 <[hidden email]>
然后我又想到一个问题,为什么这些内存是 anon
而不是在libpython里或者其他什么地方

在 2011年9月14日 上午11:11,范三山 <[hidden email]> 写道:
> 我发现一个愚蠢的错误。
>
> 我在代码里捕获一个小概率的时间,然后忘记去掉调试代码了............
> import pdb
> pdb.set_trace()
>
> 应该是这个问题,真是该死
>
> 在 2011年9月14日 上午11:07,Zoom.Quiet <[hidden email]> 写道:
>> 在 2011年9月14日 上午10:54,范三山 <[hidden email]> 写道:
>>> 之前把一个每日200w动态请求的应用从apache mod_wsgi 迁移到 nginx + uswgi
>>> ,请求处理也很简单,就是查一次数据库库,记一次日志。到了第二天以后发现内存飙升到100%,即使是没有任何请求的情况下。4个uwsgi进程每个都消耗了数G的内存,并且一直不释放,这会是什么方面的原因,我怀疑是与文件操作有关?
>>>
>>
>> 简单的方式,先配置 uWSGI 每1024 次请求后,就重启
>>    - 然后,检查代码吧,,,
>>    - 俺相信,只要你将应用的代码行数减少一半,这问题,一定不存在了,,
>>
>>> sudo pmap -d 11112
>>> 11112:   uwsgi -s /tmp/mars.sock -M -p 4 --env
>>> DJANGO_SETTINGS_MODULE=settings -w
>>> django.core.handlers.wsgi:WSGIHandler() --daemonize /var/log/uwsgi.log
>>> Address           Kbytes Mode  Offset           Device    Mapping
>>> 0000000000400000     312 r-x-- 0000000000000000 008:00001 uwsgi
>>> 000000000064d000       4 r---- 000000000004d000 008:00001 uwsgi
>>> 000000000064e000      20 rw--- 000000000004e000 008:00001 uwsgi
>>> 0000000000653000      20 rw--- 0000000000000000 000:00000   [ anon ]
>>> 0000000000b14000 1029952 rw--- 0000000000000000 000:00000   [ anon ]
>>> 00007fe6cd866000   49156 rw--- 0000000000000000 000:00000   [ anon ]
>>
>>
>>
>>
>> --
>> 人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
>> 俺: http://about.me/zoom.quiet
>> 文字协议: http://creativecommons.org/licenses/by-sa/2.5/cn/
>>
>> --
>> 来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
>> 发言: [hidden email]
>> 退订: [hidden email] (向此发空信即退!)
>> 详情: http://code.google.com/p/cpyug/wiki/PythonCn
>> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
>> 强烈: 建议使用技巧: 如何有效地报告Bug
>>        http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
>>
>

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
       http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 在用uwsgi部署python程序的时候,每个uwsgi进程都会生成数G的内存,并且在没有任何流量的情况下也不释放

limodou
In reply to this post by 范三山
2011/9/14 范三山 <[hidden email]>:
> 然后我又想到一个问题,为什么这些内存是 anon
> 而不是在libpython里或者其他什么地方

uwsgi有一个参数是可以限制内存大小的。

--
I like python!
UliPad <<The Python Editor>>: http://code.google.com/p/ulipad/
UliWeb <<simple web framework>>: http://code.google.com/p/uliweb/
My Blog: http://hi.baidu.com/limodou

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
        http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 在用uwsgi部署python程序的时候,每个uwsgi进程都会生成数G的内存,并且在没有任何流量的情况下也不释放

Leo Jay
2011/9/14 limodou <[hidden email]>:
> 2011/9/14 范三山 <[hidden email]>:
>> 然后我又想到一个问题,为什么这些内存是 anon
>> 而不是在libpython里或者其他什么地方
>
> uwsgi有一个参数是可以限制内存大小的。
>

这个它怎么限制?超了又如何?强制杀进程?

--
Best Regards,
Leo Jay

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
        http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 在用uwsgi部署python程序的时候,每个uwsgi进程都会生成数G的内存,并且在没有任何流量的情况下也不释放

limodou
2011/9/14 Leo Jay <[hidden email]>:

> 2011/9/14 limodou <[hidden email]>:
>> 2011/9/14 范三山 <[hidden email]>:
>>> 然后我又想到一个问题,为什么这些内存是 anon
>>> 而不是在libpython里或者其他什么地方
>>
>> uwsgi有一个参数是可以限制内存大小的。
>>
>
> 这个它怎么限制?超了又如何?强制杀进程?
>

内部原理我不清楚,uwsgi可以有一个主进程,它应该可以监控所有子进程。是不是强杀不清楚,不过有可能可以发一个信号,让子进程自动退出吧。或者自已判断自已?

--
I like python!
UliPad <<The Python Editor>>: http://code.google.com/p/ulipad/
UliWeb <<simple web framework>>: http://code.google.com/p/uliweb/
My Blog: http://hi.baidu.com/limodou

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
        http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html