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

2017-07-06 01:57:49 +08:00
 yangxuan8282

我写了一个 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
2663 次点击
所在节点    Linux
6 条回复
yangxuan8282
2017-07-06 02:29:48 +08:00
修改后的脚本: https://github.com/yangxuan8282/create_ap/blob/master/create_ap
主要是用 iptables 把流量都转发到 1080 端口,也就是 ss-redir 的端口
monnand
2017-07-06 09:00:00 +08:00
没有去看你的脚本。假设你的脚本在两处跑的东西都一样。

你在容器外 ps aux 看到那几个容器里的进程资源使用是什么?你有没有查 cpuacct.usage?
sleshep
2017-07-06 09:31:27 +08:00
用这个看
docker stats `docker ps --format='{{.Names}}'`
yangxuan8282
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
2017-07-06 21:16:33 +08:00
正常做法:容器内部运行 top 或者 htop 查看 cpu 占用最高的进程,排查原因。


快速做法:不管什么原因,直接添加--cpus=".05"参数限制使用 CPU。( 5%的意思)
yangxuan8282
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,不知道作者会不会回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/373360

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX