哦?那我理解的 puma 的 threads 配置似乎是有问题了 有个 min max 同时我也看到了有些情况数据库连接突然的减少和增多 我还以为是回收和释放了呢
thread 也是会回收的
capistrano 用的多一点
用 docker 也不赖
我曾经也遇到过这个问题,
ruby 的 gc 我是这么理解的
每次内存使用完毕后,会标记为 可释放,但是什么时候释放,就得看 ruby 的 gc 和操作系统的释放条件了 我记得在某篇文章记得 ruby 启动有个参数可以控制 gc 的启动条件,也可以在编译 ruby 的时候写进去
ps 假设一次消耗 100M 按照题主的 puma 配置:4workers, 每个 worker 8~16 核 跑满就需要 4 * 16 * 100M = 6.4G, 但是 puma 我当时选择的是 worker 的工作方式,回收 threads 是要靠主线程的, 当主线程认为压力过大的时候,worker threads 是来不及销毁的,直接拿来处理下一条
如果是 4 cpus / 8G 内存,就刚好够用,但是如果这台机器跑了其他的东西,比如 db, redis 啥的,估计服务就挂了
我遇到的实际情况是
每台机器本身访问量在 1000rpm 之后我们有个黑白名单,名单本身不小,大概 2w 条,这些数据不稳定,易变。 之后写入的数据要过这个名单,过一次加上七七八八的计算,要 2 秒. 一个访问就消耗 20M 左右的内存,,但是这种过滤操作本身量不多 之后 puma 就占了 1.5 G, 2 cpus/4G 运行个 1-2 小时,服务器内存就到 85%, 当时研究了好久,最后发现 puma 开的 threads min 和 max 都设置的 30.
后来一算 觉得 thread 似乎很不合理,网站大部分数据是在 30ms 之内就请求完的, 其实我平均每个访问控制在 100ms,10 个 threads 在每个 worker 下, 这样 2 workers 我就可以承受 6000rpm 的访问, 之后我就修改了 threads 成为 min 5 max 15, killer 设置成 1.5 G 内存,90% 启用,基本很少看到 killer 运行
西南地区的 ruby 都集中在成都啊 重庆好荒凉的感觉
现在用第三方服务,都是直接看 rest api 之后自己实现成 gem。。。
如果实在不行 但是又非常有必要访问 这招 通吃 但是 ssl 的意义就没了
require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
少年 阿里 centos 6.x 吧?升级下你的 openssl
我最喜欢在简历上看到“熟练掌握” 、 “精通”
一般来说 包括发送的数量级 邮件组 规则等
哟 爬虫扒视频啊 记得设置 timeout
更新可能是故障了,我也是出这个东西
小哥 下次代码仓库可以不用提交 gem 本身的
本地调试的话,直接使用 rake install 即可
要推 gem 的时候
rake build, 之后在 pkg 文件夹下面找
记得把 pkg 写在 .gitignore 里
xx 有你更精彩
这个域名 会跟 testin 打官司吧姐姐
从 atom 切到 visual studio code 几个月了,atom 太太太太太太太卡了 当然更别提 jb
哥哥,配个 newrelic 看看你这个访问 调用了多少次数据库就知道了
rspec 和 minitest 哪个都 ok 初学无所谓 php 才是最好的语言
微信登录 mock 不好做 web mock 用 webmock 这个 gem
sidekiq 的 work 你就测 work 的逻辑就好了
很好奇 tower 这么大的体量的应用 应该是典型的 monolithic
是靠 Rails Engine 拆业务么
随便打听下 彩程微服务了么
写过控制 ali docker 和美团云的 可以交流下
先检测 passenger 是否正常工作
我隐约记得 passenger 好像和 nginx 搭配要重新编译一下
不嫌弃的话 试试 puma
这玩意对浏览器版本要求极其高
记着一条就行 routes.rb 本身也是 ruby 文件 遵守 ruby 的语法
git config credential.helper https://git-scm.com/docs/git-credential-store
我们最开始使用 github 的 wiki 来写 markdown
但是经常忘记再修改完毕代码之后更新对应的 markdown
最终导致文档失效。
我在想,能不能用 vcr 记录下集成测试的 json 值 一旦有变化,自动发钉钉什么的要求开发补完,否则项目状态就是红的,之后前端只使用状态为绿的的 api
这是我上次说的 wisper 的方式
class Job
###...
after_save :send_finished_info
def send_finished_info
if status_changed? && self.class.finished_statuses.include?(status)
WisperBroadcast.new.broad_cast(:job_finished, self)
end
end
# init 里
module RegisterObserver
class << self
def init
Wisper.subscribe(QueueObserver.new)
Wisper.subscribe(AgentObserver.new)
Wisper.subscribe(MonitorQueueObserver.new)
# ...
Wisper.subscribe(MixpanelObserver.new)
Wisper.subscribe(StarBranchesObserver.new)
Wisper.subscribe(DingTalkMessageObserver.new)
end
end
end
RegisterObserver.init
之后就可以全局看到多少人受到 job_finished 的影响了

当然这种写法你最好不要在一个 observer 里再次 broadcast,如果你那样做,就跟 after_create 这种回调链没有区别了
淡定,我注册了 N 年,至今还开小号发新手问题
叮叮 自打机器人上线了之后 就忘记 slack 了
不闲付费的话可以试用我司 flow.ci 一键 ci 无需提供机器 push 自动跑测试
曾经被 migrate 弄吓着过
有次处理 mysql 的 index 的创建的时候 因为使用了 ali 提供的 RDS,遇见了创建 varchar 255 的 index 长度的问题,migration 失败了 但是这玩意它是创建成功了几个之后失败的,失败后是不会自动回滚删掉之前创建成功的 index 的 当时拿公司 ci 跑的 capistrano,还以为出了什么大事故, 重新跑了几次都不行,最后曲线救国,登数据库手动删,再改字段什么的。 线上数据,操作的时候手都在抖,测试环境演练了几次,半夜 2 点爬起来备份数据库弄
后来,用 mongodb 了。。。。。。