【发布时间】:2020-01-02 15:53:55
【问题描述】:
我在 docker 容器上遇到问题。 Rails 应用程序运行速度非常慢(意味着页面在浏览器上加载时间过长)。
申请详情:
Rails 版本:4.2.0
Ruby 版本:2.2.0
当我通过命令docker stats检查内存状态时,显示主容器的CPU利用率非常高(1)。有时它会用到50% 的利用率。
我尝试了一些配置,即增加 docker 的 CPU 分配,性能得到了一点提升。
version: '3.7'
services:
selenium:
image: selenium/standalone-chrome-debug:3.141.59-krypton
ports: ['4444:4444', '5900:5900']
logging:
driver: none
redis:
image: redis:3.0.0
elastic:
image: elasticsearch:1.5.2
db:
image: postgres:9.3.10
volumes:
- ./tmp/db:/var/lib/postgresql/data
- .:/home
XYZ:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
stdin_open: true
tty: true
volumes:
- .:/home
ports:
- "3000:3000"
depends_on:
- db
- redis
- elastic
- selenium
environment:
- REDIS_URL=redis://redis:6379/0
- ELASTICSEARCH_URL=elastic://elastic:9200/0
- SELENIUM_HOST=selenium
- SELENIUM_PORT=4444
- TEST_APP_HOST=XYZ
- TEST_PORT=3000
我观察到在浏览器上加载的 js 文件花费了太多时间来加载大约 1.3 min,例如,如果有 4 个 js 文件,每个文件需要更多的时间来加载 1 min
我觉得docker在mac机器上运行很慢,因为同样的应用程序在Linux机器上运行得很好,可能是我错了,但这是我看到的观察结果。
任何帮助将不胜感激。
【问题讨论】:
-
能否也包含
top命令的结果 -
Mac 上的 docker 不是原生的,而是 HyperKit,一个建立在 Hypervisor.framework 之上的轻量级 macOS 虚拟化解决方案。这可能与性能差异有关
-
您是否尝试过使用缓存和委托 [1] ?你试过像 docker-sync 这样的外部工具吗?你能用没有体积的容器做测试吗? [1]:docs.docker.com/docker-for-mac/osxfs-caching
-
@jmny 我还没试过 docker-sync 让我试试这个会让你知道的
-
你好@jmny,谢谢你的建议,
docker-sync实际上在我的场景中工作,现在好多了。但是现在我面临一个问题,即刷新页面时它不会同步最新代码。你能告诉我我错过了什么吗?
标签: ruby docker docker-compose ruby-on-rails-4.2