議事録(125) - hamamatsu-rb/hamamatsu-rb.github.com GitHub Wiki
Hamamatsu.rb 125
今日の議事録
始める前に雑談
- Langurさん久しぶり
Slackから話題
RubyのGCについて
-
月次バッチ処理を作っていた
-
データ量が多いやつを実行したらコンテナが落ちた😅だんだん増えてって落ちる
-
EC2のFargateを使っています。メモリがオーバーするとFargateの判断でコンテナ落としてしまう
-
コンテナでメモリが0.5Gbくらい 100MBくらいRubyで使ってるのでは
-
DBはRDSなので別の場所にある
-
メモリ上げてもいいんだけど何とかしたい(富豪プログラミング!)
-
できれば貧乏プログラミングでなんとかしたい
-
ObjectSpace.memsize_of_all
-
GC.startを入れると安定してくる...
-
find_in_batchとかのデフォルト取得数(1000個)が多かったりしたことがあった
-
module GC (Ruby 3.0.0 リファレンスマニュアル)
-
GCのチューニングについて
-
チューニングのための環境変数
-
Jemma Issroff, Ruby Garbage Collection Deep Dive
-
DetailLog.within_shipped_at(from, to).distinct.pluck(:hoge_code)
-
select distinct hoge_code from detail_logs where shipped_ at < from between to > shipped_at
-
6~8万件くらい取得
-
最終的には文字列型だけが配列に
-
84バイト×80,000=7MBくらい?
-
GC/メモリを使い果たさない限りは問題がないはず
-
ActiveRecordが使っているのか?ActiveRecord以外の犯人は無いかも
-
リークかどうかの判断は難しい
-
富豪的プログラミング by 増井俊之 (富豪化理論研究家)
-
増井俊之 - Wikipedia
-
https://ja.wikipedia.org/wiki/%E5%A2%97%E4%BA%95%E4%BF%8A%E4%B9%8B
-
業務コードなんで写せません
-
外側に同じ名前の変数があって参照が生き続けてないか?
-
⇒GC.Startを入れると安定するなら違うか…
@hogehoge_codes.each do |code|
target_detail_logs = ::DetailLog.where(hogehoge_code: code).order(hogehoge_code: :asc)
# いろいろ更新処理
# target_detail_logs = nil
# GC.start
end
hogehoge_codes.sort.in_groups_of(GROUP_SIZE, false).each do |codes|
target_detail_logs = ::DetailLog.where(hogehoge_code: code).order(hogehoge_code: :asc)
end
-
ActiveRecordのキャッシュクリア
-
ActiveRecord::Base.connection.query_cache.clear
-
コンテナはスワップできるのか?⇒スワップ指定もできます
-
メモリの圧縮はまだ3.0でも未実装
-
GC.auto_compact=(true)のオプションを入れると有効になるが、主要なコレクションのパフォーマンスが低下するらしい
-
落ちたら続きからやるような処理はできない?⇒トランザクション使いたいので無理
-
最適化 (情報工学) 格言 出典: フリー百科事典『ウィキペディア(Wikipedia)』
-
「細かい効率のことは忘れて、時間の97%について考えよう。時期尚早な最適化は諸悪の根源だ。それでも残り3%についても機会を逃すべきではない」3(https://ja.wikipedia.org/wiki/%E6%9C%80%E9%81%A9%E5%8C%96_(%E6%83%85%E5%A0%B1%E5%B7%A5%E5%AD%A6)#cite_note-3) - ドナルド・クヌース
-
「ボトルネックは思いもよらない場所に存在するので、ボトルネックの箇所を特定するまで性能最適化(ハック)してはいけない」 - ロブ・パイク
メモリ制限の書き方
プロダクションの Rails サーバーの利用メモリがひたすら増加していくような挙動を観測したとき、どう対応するのがよいですか?
参考になりそうな本
-
『Rubyのしくみ -Ruby Under a Microscope』の読書メモ<第12章> - kenju's blog
メモリ使用量の想定ってどうやって計算する?
-
あんまり計算しないかも
-
ざっくり計算して実測
-
思い込みより実測が大事
-
OSによってヒープどれだけ違うかとかを意識しないといけない
-
組み込みの世界はGCに頼らない書き方をしないといけない
-
ActiveRecord::Base.connection.query_cache.clear とかどうでしょう
Stimulusどうなんすかね
-
フロントエンド作るためのフレームワーク
-
ERBみたいな感じでjsコードに置き換える
-
clickイベントを作ると自動でサーバーサイド側のコードまでバインディングされるみたいな
-
Turbo Streamsとかいうのもある
-
HotwireとかはJS側で受け取ったjsonを処理して画面のレンダリングに反映するのではなく、HTMLそのものを受けってそのままレンダリングする。
-
Hotwireとは何なのか?
-
車用語っぽい?
-
書き方が分かりやすいかはちょっと疑問…❓
-
しばらく静観を決めつつもちょいちょい調べる
Basecamp
-
https://jp.techcrunch.com/2021/05/01/2021-04-30-basecamp-employees-quit-ceo-letter/
-
MasterとSlaveみたいな差別用語の話もややこしいわね(Masterだけなら問題ない?)
-
Twitter、コードやドキュメント内の用語「Whitelist/Blacklist」「Master/Slave」「Dummy value」などを好ましい用語へ置き換え、具体例も発表 - Publickey
-
https://www.publickey1.jp/blog/20/twitterwhitelistblacklistmasterslavedummy_value.html
-
githubもdefault⇒mainになっている
アプリケーションキラキラネームRuby始まり説
-
nokogiri
-
PC98時代から日本語名アプリはあった気がする
-
桐 https://ja.wikipedia.org/wiki/%E6%A1%90_(%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9)
-
https://rubykaigi.org/2021-takeoutライブラリ名が機能そのものではなくなった。ググラビリティ優先?
-
被らないようにするのが大変よね
-
Stimulus(刺激)ネイティブの人は違和感感じないのだろうか…
-
Hotwire(点火装置)
-
Turbo Pascal(コンパイラ速いPascal)パスカル自体は圧力の単位?
-
由来はブレーズ・パスカルです
-
thor
TypeScript
-
型がついたJavascript
-
時代は再び型?
-
O'Reilly Japan - JavaScript: The Good Parts
-
だんだん関数型に写っていく流れもある
-
クラスを作ってインスタンスを作って・・・という流れではなくなってきている
告知
-
RubyKaigi Takeout 2021
-
2021/9/9、2021/9/10、2021/9/11
-
CFP
-
JAWS-UG 2021/7/28
-
テーマは App Runner !
-
Maker Faire Tokyo 2021 2021/10/2、2021/10/3
-
東京行かなかった組で鴨江アートセンター集まる予定。裏Maker Faire?
-
ET & IoT Digital 2020 2021年 11月17日(水)-19日(金) 会場:パシフィコ横浜
次回のネタは
-
雑談の会?
-
Slackとかgoogle docsにあらかじめ作ってくれてると助かる
-
ex) JAWS-UGのアジェンダ
-
https://docs.google.com/document/d/1kIx02hBDS6BYE8euCpxxWHcXMYvEF0nq1H4tJkfAa4Y/edit
-
ネタは事前持ち寄り制にしています
-
持ち時間はできるだけ守ってもらうように
-
8/18にしましょう
-
KPT
-
http://firekpt.jacoyutorius.com/board/?id=-MeZrBk4RLpAaW187DRg&title=Hamamatsu.rb%20%23125
Hamamatsu.rb #125
KEEP
- 久しぶりの参加! ★1
- リアルタイム議事録 ★4
- フリーテーマも良かった ★2
- 直面してる問題について色々アドバイスもらえてたすかりました! ★1
- 実運用の課題が聞けたのは助かる
- 勉強になります ★2
- カメラ買いました
PROBLEM
- Ruby書いてないや ★1
- GCむずかしい・・ ★1
- 部屋が暑かった ★2
- Stimulus と Hotwireもう少し調べてみます ★2
TRY
- GCのお勉強 ★1
- Ruby 3.0トライ(続) ★1
- ネタを考える ★1
- なんかLT
- HotwireとStimulusちょっと調べてみる ★1