V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
yangxuan8282
V2EX  ›  Linux

问下脚本在容器里占用资源比在实机上直接运行高得多可能会是由什么引起的

  •  
  •   yangxuan8282 · 2017-07-06 01:57:49 +08:00 · 2759 次点击
    这是一个创建于 2696 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我写了一个 docker,把 oblique/create_ap 这个脚本修改了一下和 ss-redir 放到里面,搭建了一个可以创建自带全局代理的热点的镜像,但是现在遇到了问题,在宿主机上直接运行这两个服务占用资源不算多,但放进容器之后这个建立热点的脚本差不多能占满一个核,而且用 docker exec 看了下容器这个脚本里开了 3 个进程,一开始记得只有一个,不知道这种情况可能是由什么引起的

    docker exec 0ee6068bdeaf ps -aux
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.0    200     4 ?        Ss   17:28   0:00 /usr/bin/dumb-init -- /my_init
    root         7  0.0  0.5   6368  5192 ?        Ss   17:28   0:00 /usr/bin/python -u /my_init
    root         9  0.5  1.3  14492 12336 ?        S    17:28   0:01 /usr/bin/python2 /usr/bin/supervisord -c /etc/supervisord.conf
    root        12  0.0  0.1   2412  1776 ?        S    17:28   0:00 /bin/bash /usr/local/bin/create_ap wlan0 eth0 MyAccessPoint MyPassPhrase
    root        13  0.0  0.0   1636     4 ?        S    17:28   0:00 /usr/sbin/crond -f
    root        14  0.0  0.0   2896   796 ?        S    17:28   0:00 ss-redir -u -s $SS_SERVER_IP -p $SS_SERVER_PORT -l $SS_LOCAL_PORT -k $SS_PASSWD -m $SS_METHOD -b 0.0.0.0
    root        15  0.0  0.1  14956  1340 ?        Sl   17:28   0:00 /usr/sbin/rsyslogd -n
    nobody     139  0.0  0.0    976    60 ?        S    17:29   0:00 dnsmasq -C /tmp/create_ap.wlan0.conf.00dNEmn1/dnsmasq.conf -x /tmp/create_ap.wlan0.conf.00dNEmn1/dnsmasq.pid -l /tmp/create_ap.wlan0.conf.00dNEmn1/dnsmasq.leases -p 5353
    root       140  0.0  0.1   2412  1504 ?        S    17:29   0:00 /bin/bash /usr/local/bin/create_ap wlan0 eth0 MyAccessPoint MyPassPhrase
    root       141  0.0  0.0   3448   704 ?        S    17:29   0:00 /usr/sbin/hostapd /tmp/create_ap.wlan0.conf.00dNEmn1/hostapd.conf
    root       543 92.7  5.3  51732 50824 ?        R    17:34   0:03 /bin/bash /usr/local/bin/create_ap wlan0 eth0 MyAccessPoint MyPassPhrase
    root       547  0.0  0.0   1620   640 ?        Rs   17:34   0:00 ps -aux
    
    6 条回复    2017-07-07 11:30:52 +08:00
    yangxuan8282
        1
    yangxuan8282  
    OP
       2017-07-06 02:29:48 +08:00
    修改后的脚本: https://github.com/yangxuan8282/create_ap/blob/master/create_ap
    主要是用 iptables 把流量都转发到 1080 端口,也就是 ss-redir 的端口
    monnand
        2
    monnand  
       2017-07-06 09:00:00 +08:00 via Android
    没有去看你的脚本。假设你的脚本在两处跑的东西都一样。

    你在容器外 ps aux 看到那几个容器里的进程资源使用是什么?你有没有查 cpuacct.usage?
    sleshep
        3
    sleshep  
       2017-07-06 09:31:27 +08:00
    用这个看
    docker stats `docker ps --format='{{.Names}}'`
    yangxuan8282
        4
    yangxuan8282  
    OP
       2017-07-06 13:37:28 +08:00
    @sleshep
    这个命令好像以前没用过

    ```
    CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
    ssap_ss_ap_1 99.98% 80.06MiB / 923.4MiB 8.67% 0B / 0B 16.3MB / 90.1kB 0
    ```

    能看到 cpu 占用是挺高的,不过还是不清楚是由什么导致的
    zuolan
        5
    zuolan  
       2017-07-06 21:16:33 +08:00
    正常做法:容器内部运行 top 或者 htop 查看 cpu 占用最高的进程,排查原因。


    快速做法:不管什么原因,直接添加--cpus=".05"参数限制使用 CPU。( 5%的意思)
    yangxuan8282
        6
    yangxuan8282  
    OP
       2017-07-07 11:30:52 +08:00
    @zuolan

    cpus 的选项我试了一下报错说:

    ```
    NanoCPUs can not be set, as your kernel does not support CPU cfs period/quota or the cgroup is not mounted
    ```

    看 github issues 大概是因为内核没打开相关的选项

    资源占用高确实是由建立热点的脚本引起的,而且后来试了一下修改前的脚本也是占用资源高
    去原脚本的 github 上开了个 issues,不知道作者会不会回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5341 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 06:59 · PVG 14:59 · LAX 22:59 · JFK 01:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.