目前情况是这样的:centos7 阿里云,1 核 cpu,1g 内存,1m 带宽,用的 mysql8.0,占了 300m 内存,大概剩 700m 内存空间,然后使用的 nginx 和 puma 做后台服务器?如何能把并发最大化?比如 100 并发。有没有大神从 rails 角度,nginx 角度,puma 角度和数据库优化角度详细讲讲,小弟真的搞了好久,都没弄好,比如缓存啥的,数据库优化啥的,Linux 配置啥的,nginx 配置啥的?不准备再投钱了,毕竟穷学生一枚。有哪位大神给讲讲,真心谢谢了!!!!!
虽然可以讲一本书... 不过有几个情况你先介绍下更好:
Rails 是用 production 模式开的吗? 你知道慢在哪里了吗?有没有测过?
内存太小,缓存基本作用不大...
从图上看来,你的 css 文件响应很慢,可能:
这个机器配置,puma 单进程,几个线程就足够了。
application.js 的平均响应时间 4s 最高 9s, 你直接把 js 请求交给 Rails 处理了么?
生产环境要 assets:precompile
预编译,然后用 nginx 托管静态文件
这个是 application.js 和 application.scss 的大小,感觉是有点大,但是不是因为包含了 jQuery 和 bootstrap?
你 nginx 代理静态资源写的是这个:
location ~*^/app/assets/{
}
有这个路径吗?换下下面这个试试:
location ^~ /assets/{
}
顺便建议在 config/environments/production.rb 加上:
config.serve_static_files = false # 不让后端处理静态资源请求,可以检测你nginx是否真的代理的静态资源
怎么会 压测显示 fonts.googleapi.com 明明很快的很稳定呀
@early 已经给出正确答案了
另外在补充一下,Rails 编译静态资源的时候,默认就生成了 gzip(.gz)格式的文件,所以对 assets 下的资源 Nginx 可以启用
gzip_static on;
另外你的 puma 配置里面,你只有一个核,开 3 个 worker 也没什么用,线程锁定 6 个也没什么意义,平时访问量很低的话 1, 6
应该会更合理
吐个槽:问题可以改成 Rails 应用如何正确的部署 production,并发量问题对它而言太笼统了
# How many worker processes to run. Typically this is set to
# to the number of available cores.
#
# The default is "0".
#
# workers 2
puma 自己对 worker 这个参数的解释,你每 new 一个 Rails 项目都能看到这段话
按照你说的,界面确实变乱了,jquery 也没有了,但是能找到 html,代表后台处理静态资源?那应该在 nginx 加什么实现 nginx 代理静态资源,感谢大佬了
nginx 那个改成我自己的就正确了,使用 config.serve_static_files = false 也加载资源了,所以应该 nginx 代处理静态资源,配的应该正确
Repeat after me: I will not optimize anything in my application until my metrics tell me so.
nginx 的 root 目录应该指向 public 而不是根目录
原则上 app 目录下的资源是不允许直接被 nginx 访问的,不需要 assets pipeline 管理的静态文件应该直接放到 public 目录下面去
吐个槽:问题可以改成 Rails 应用如何正确的部署 production,并发量问题对它而言太笼统了
这让我想到一个问题,会不会是 Ruby Rails 部署太过复杂?( 我知道你会说 Heroku....但真的太昂贵了 )
这不只是 Rails 的问题吧,现在的『全栈框架』部署起来差不多都这个样子,毕竟涉及的东西就有这么多
其实也没有多复杂,只是楼主可能没有仔细去看 Rails 部署相关的文章,走了很多弯路
社区缺一篇相关的 Wiki 倒是真的