V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
HuasLeung
V2EX  ›  程序员

1 核 1g 的服务器使用 docker,内存捉急

  •  
  •   HuasLeung · 2019-06-15 10:37:56 +08:00 · 15836 次点击
    这是一个创建于 1748 天前的主题,其中的信息可能已经有所发展或是发生改变。

    又开了台 digital ocean 的 1 核 1g 小鸡,docker 只运行了 2 个容器实例,内存就用了 87%…… https://i.loli.net/2019/06/15/5d045a508b2ce95475.png https://i.loli.net/2019/06/15/5d045a6cc6b8a99054.png

    tomcat 里跑了一个 java 应用,jvm 是真的吃内存…… https://i.loli.net/2019/06/15/5d0457f10b7a363852.png

    以后尽量用 go 写东西了,应该能节省不少的服务器资源

    42 条回复    2019-06-16 18:41:52 +08:00
    elfive
        1
    elfive  
       2019-06-15 10:48:14 +08:00 via iPhone
    go 和 java 都耗资源…
    HuasLeung
        2
    HuasLeung  
    OP
       2019-06-15 10:51:36 +08:00
    @elfive 小机子都不方便,看来只能扩容了
    wzw
        3
    wzw  
       2019-06-15 10:59:20 +08:00 via iPhone
    我都还没用上 docker ……
    my101du
        4
    my101du  
       2019-06-15 11:04:34 +08:00   ❤️ 2
    我在 8G 内存的 macOS 上对比 docker 和 VirtualBox:

    1. docker 服务自身 + 限制分配 1G 给几个小的 php 应用。内存里查看进程 com.docker.hyper 总共占用 1.6G 左右
    2. 开一个 VirtualBox, 再分配一个 CentOS7 虚拟机 768M 内存,内存里查看几个进程合计 800M+200M = 1G 左右

    但是很奇怪的是,再对比 全部系统内存剩余情况

    运行 docker 时,系统剩余 1.5G 内存
    运行 VirtualBox 时, 系统剩余 900M 内存

    我不懂 docker 内部的机制。 但是感觉

    docker 的内存占用数据,很可能把和系统共享的那部分也算进去了,实际上并不会占用那么多,只有跑的容器才“真正”占用
    而 VirtualBox 分配的虚拟机,是实实在在时刻霸占着资源的。


    所以你这个情况,主要是 MySQL 和 Java 服务消耗资源大,和 docker 本身关系不大吧。。。
    dreasky
        5
    dreasky  
       2019-06-15 11:04:43 +08:00
    docker 说这锅不是我的,linux 内存占用 87%很正常,加个 swapfile 就可以了
    leopku
        6
    leopku  
       2019-06-15 11:04:45 +08:00 via iPhone
    @elfive 小机跑了好多个 go 程序的容器,没见多吃内存
    miniliuke
        7
    miniliuke  
       2019-06-15 11:07:51 +08:00 via Android
    你这 mysql 就占了 40%,java 占了 25%,这是 mysql 的锅啊
    abcbuzhiming
        8
    abcbuzhiming  
       2019-06-15 11:10:55 +08:00   ❤️ 1
    这关 docker 什么事情,docker 还能有中变没降低内存消耗不成?拿 1G 内存,即跑 JVM 又跑 MySQL 我也是醉了,你当心你的 MySQL 因为内存 crash
    xiaolanger
        9
    xiaolanger  
       2019-06-15 11:14:53 +08:00
    1G 内存,我是能不跑 MySQL 就不跑了
    hst001
        10
    hst001  
       2019-06-15 11:15:16 +08:00
    @elfive #1 把 go 去掉,别误导别人了
    skiy
        11
    skiy  
       2019-06-15 11:21:15 +08:00
    自从在美团云上用 docker 把硬盘挂掉之后,就不敢再在 1G 的小鸡上玩 docker 了。
    yixiang
        12
    yixiang  
       2019-06-15 11:31:21 +08:00
    默默看了看手里 256M 内存的 vps。内存跑满没啥问题,内存就是拿来用的,长期闲置的内存长期浪费钱。
    realpg
        13
    realpg  
       2019-06-15 12:47:23 +08:00
    @xiaolanger #9
    只要一个小小的参数 就可以 256M RAM 流畅跑轻度负载 mysql 服务器
    ctro15547
        14
    ctro15547  
       2019-06-15 13:12:08 +08:00   ❤️ 1
    my-small.cnf ,mysql 好像有这个配置适合在少内存的机器上跑,可以取舍一下
    niubee1
        15
    niubee1  
       2019-06-15 13:16:27 +08:00
    你要节约资源的话, 还是用 C++写东西吧
    roychan
        16
    roychan  
       2019-06-15 13:29:48 +08:00
    mysql 的 performance 模式关掉就可以了
    rawidn
        17
    rawidn  
       2019-06-15 13:31:07 +08:00 via iPhone
    @my101du mac 下的 docker 不是原生的,是内部起了一个轻量的虚拟机,所以看着内存占用比较大。linux 下 docker 服务本身的内存占用几乎可以忽略
    barbery
        18
    barbery  
       2019-06-15 13:34:09 +08:00
    显然是 JVM 的事情,说 go 耗资源的,我也想知道怎么得出来的结论???
    Nasei
        19
    Nasei  
       2019-06-15 13:41:02 +08:00 via Android
    @my101du 你可以在虚拟机里再装 docker 看看,mac 上的 docker 包括 win 上的 linux 容器都是虚拟机,只有 linux docker 和 win10 的 windows 容器是原生的
    shm7
        20
    shm7  
       2019-06-15 13:54:43 +08:00 via iPhone   ❤️ 1
    这玩意给你用 ss 的 你搞个 jvm
    hoyixi
        21
    hoyixi  
       2019-06-15 14:26:37 +08:00
    1G,这机器你直接跑且单独跑 Java 都够呛,Java 是“贵”族,写 Java 掌控 Java 的也是“贵”族

    要不 PHP 咋那么受中小企业欢迎呢
    1073850525
        22
    1073850525  
       2019-06-15 14:40:20 +08:00   ❤️ 1
    jvm 可是试试 openj9,比 openjvm 省资源
    我也是 1G 1 核 ,跑 nginx 和 两个 tomcat 和 mysql
    0x000007b
        23
    0x000007b  
       2019-06-15 15:04:07 +08:00 via Android
    @elfive go 更吃 cpu 相对内存来说算力更便宜些
    my101du
        24
    my101du  
       2019-06-15 15:21:35 +08:00
    @Nasei @rawidn

    谢谢指教。 那说明这个轻量的虚拟机, 比 VirtualBox 这些传统的虚拟机软件,实在是太节省资源了~ ( monitor 里看起来单个进程内存占用大,但对整个系统的真实内存占用其实并不大)
    gavinjou818
        25
    gavinjou818  
       2019-06-15 16:19:31 +08:00
    我也试过用 2G 的阿里来玩 DOCKER,但是无奈后面也直接放弃了。。实在太卡了。。基本开了几个镜像也没什么内存了。
    version
        26
    version  
       2019-06-15 16:59:31 +08:00 via iPhone
    docker 起码要最低配置 8 核 16g 吧,硬盘 ssd 买大一点,k8s 起码要买 10 台服务器吧,如果不是手写脚本更新重启,省资源机器,压测还更稳定,不见得 docker 和 k8s 出问题好解决
    spadger
        27
    spadger  
       2019-06-15 17:26:44 +08:00
    我 256M 内存的机器,连 bundle install 命令都跑不起来...
    qfdk
        28
    qfdk  
       2019-06-15 18:51:37 +08:00 via iPhone
    说下方法给你吧 开个 swap 就好了 1G 内存跑了 n 个容器 加上 lnmp 和 Spring 全家桶 pay.qfdk.me 就是上面的
    wspsxing
        29
    wspsxing  
       2019-06-15 19:04:11 +08:00 via Android
    java 适合大项目+好机器
    wee911
        30
    wee911  
       2019-06-15 19:23:30 +08:00
    跟 docker 没关系,java 就这么吃内存
    swulling
        31
    swulling  
       2019-06-15 19:27:03 +08:00 via iPhone
    @my101du Mac 上的 Docker 是跑在虚机里的 Linux 上的。和 Linux 下的 Docker 完全不是一回事
    uptime
        32
    uptime  
       2019-06-15 19:31:36 +08:00
    我 64M 小内存跑一个 55+跑一个论坛,找谁说呢?
    1010543618
        33
    1010543618  
       2019-06-15 19:54:13 +08:00
    我的 512 内存的开 docker 跑东西内存不够一跑过一会就停,检查了半天发现内存的问题,然后开了 swap 就好了
    chwech
        34
    chwech  
       2019-06-15 20:47:06 +08:00 via iPhone
    我开了个 nginx,mysql 和 wordpress 容器,然后 mysql 就不够内存了。开了交换文件才能用。然后我的服务器一直 cpu 100%是怎么办?求支招
    NextNal
        35
    NextNal  
       2019-06-15 22:00:28 +08:00
    swapfile 可用
    johz
        36
    johz  
       2019-06-15 22:37:35 +08:00
    我的 1 核 1G 跑了 lnmp + redis 妥妥的

    johz
        37
    johz  
       2019-06-15 22:38:52 +08:00
    十几万用户的小程序服务器端
    notreami
        38
    notreami  
       2019-06-15 23:11:52 +08:00
    难道我太前沿了,tomcat 好多年前就抛弃了,现在不是 jetty 就是 undertow。
    wly19960911
        39
    wly19960911  
       2019-06-16 09:58:45 +08:00
    @notreami 你太前沿了,tomcat 还没有丢,spring boot 默认使用 tomcat
    godoway
        40
    godoway  
       2019-06-16 10:23:00 +08:00
    @notreami 还有更前沿的把 servlet 容器都丢了,基于 netty 做开发。
    例如 vert.x
    wly19960911
        41
    wly19960911  
       2019-06-16 10:35:23 +08:00
    @godoway spring flux 不就是这样吗。响应式+netty
    Hopetree
        42
    Hopetree  
       2019-06-16 18:41:52 +08:00
    我也是阿里云 1G1U,我容器运行了四个,django+mysql+redis+nginx,内存占用了 80%,刚好够用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3196 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 00:37 · PVG 08:37 · LAX 17:37 · JFK 20:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.