V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
yakiang
V2EX  ›  Python

VPS 内存吃紧了怎么办?

  •  
  •   yakiang · 2014-03-31 19:44:29 +08:00 · 5482 次点击
    这是一个创建于 3672 天前的主题,其中的信息可能已经有所发展或是发生改变。
    VPS现在有 2G 内存 + 2G swap,但一周时间就全部吃完了。
    日均PV也就200左右,后端用的 Nginx + uWsgi(2 processes) + Flask,数据库使用 sqlite + redis。
    http://bcs.duapp.com/wxtuku/IoR7Avawb2.png
    一开始我以为 linux 有比较 smart 的内存管理就一直没管它,直到 ssh 都进不去了……
    首页还是可以访问,但对一些需要访问数据库的 POST 请求就无法正常response了。
    所以我想请教各位面对内存越来越少的情况都是怎么处理的?没有经验求轻喷
    19 条回复    1970-01-01 08:00:00 +08:00
    timothyye
        1
    timothyye  
       2014-03-31 19:46:13 +08:00 via Android   ❤️ 1
    这个pv应该不至于内存不够用
    misaka
        2
    misaka  
       2014-03-31 19:52:07 +08:00   ❤️ 1
    redis 占了多少啊?
    a591826944
        3
    a591826944  
       2014-03-31 19:56:15 +08:00   ❤️ 1
    512M 阿里云路过。。。不敢装 memcache 不敢装 redis 你就是装太多了
    yakiang
        4
    yakiang  
    OP
       2014-03-31 20:12:19 +08:00
    @misaka 之前耗光时直接重启了没看redis占了多少。这是重启后按top的结果,不知道那么多个python在做什么
    http://bcs.duapp.com/wxtuku/jwqpiZ23WR.png
    @a591826944 我以为2g内存加swap应该可以应付redis……
    kevinv
        5
    kevinv  
       2014-03-31 20:14:53 +08:00   ❤️ 1
    kill掉系统没有必要的服务,查看内存占用比较大的程序。日pv200内存还不够用,真是奇了怪了。
    misaka
        6
    misaka  
       2014-03-31 20:24:40 +08:00
    @yakiang 嗯,截图我看了。。。所以说。。。redis 到底占了多少啊?
    misaka
        7
    misaka  
       2014-03-31 20:28:39 +08:00   ❤️ 1
    你用 htop ,进去以后按 F6 在左侧选择 MEM%,然后回车,再截个图看看?
    yakiang
        8
    yakiang  
    OP
       2014-03-31 20:31:09 +08:00
    @misaka 这是top下按占用内存大小排序的结果,所以重启后的redis根本没在里面。。。
    如果硬要看得话,用ps aux 看到的是这样的
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    redis 787 0.0 0.0 36912 1888 ? Ssl 18:38 0:05 /usr/bin/redis-server

    @kevinv 貌似确实后台有很多看不懂在做什么的进程。。。
    yakiang
        9
    yakiang  
    OP
       2014-03-31 20:34:10 +08:00
    @misaka 我擦,根据htop知道那么多python是什么了,他们都指向之前安装失败的YouCompleteMe的几个文件,我先把插件卸了再重启试试
    octopus_new
        10
    octopus_new  
       2014-03-31 21:06:09 +08:00
    没三天运行一次:
    #sync
    #echo 1 > /proc/sys/vm/drop_cache
    手动释放cache, 看看有什么变化:)
    octopus_new
        11
    octopus_new  
       2014-03-31 21:07:20 +08:00   ❤️ 1
    更正一下 echo 1 > /proc/sys/vm/drop_caches
    少了个s
    yakiang
        12
    yakiang  
    OP
       2014-04-01 01:25:22 +08:00
    @octopus_new 是的,之前有试过这么做,会把 buffers/cache 里的内存释放出来好像。但好像也只是减缓内存被占满的速度而已 :(
    VYSE
        13
    VYSE  
       2014-04-01 02:03:33 +08:00
    @yakiang 这个时间top没啥特别的,python也都是共享页只占一点内存。得监控内存上去时候是怎么个情况。
    raptor
        14
    raptor  
       2014-04-01 09:46:50 +08:00
    200PV…我都是用128M内存的VPS跑的…
    lang1pal
        15
    lang1pal  
       2014-04-01 10:20:40 +08:00
    @octopus_new 我觉得这样没用的吧,因为这样释放的是空闲内存,而这里是占用的swap明显是内存不够了
    cevincheung
        16
    cevincheung  
       2014-04-01 13:41:57 +08:00
    关机
    lm902
        17
    lm902  
       2014-04-02 00:24:43 +08:00
    升级内存
    kaneg
        18
    kaneg  
       2014-04-02 00:52:17 +08:00
    200PV用2G内存,太奢侈了吧,几乎可以肯定是程序有bug
    lightening
        19
    lightening  
       2014-04-02 01:05:27 +08:00 via iPhone
    我觉得看你描述好像是运行很久后占内存越来越大啊,肯定有什么地方内存泄漏了吧。
    老进程没杀掉,redis 只储存不 expire 之类的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2595 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 04:53 · PVG 12:53 · LAX 21:53 · JFK 00:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.