@ikeji それはそうと、メモリリークって言葉、周りではどう使ってたり聞いたりする?
たとえば、Rubyのクラス変数が配列で、そこに延々pushし続けたらメモリは減り続けるじゃん。それを「メモリリーク」って言うのかな?つまりは、言語の設計・実装ではどうにもできない範囲。
この辺も前からの疑問で分かってなくて、Facebookのツールがそう呼んでて余計に分からなくなったのであった。
Conversation
Notices
-
斎藤ただし (tadd@best-friends.chat)'s status on Sunday, 13-Aug-2023 14:11:17 JST 斎藤ただし -
ikeji (ikeji@ostatus.ikeji.ma)'s status on Sunday, 13-Aug-2023 14:11:16 JST ikeji @tadd @ikeji これ、俺あてじゃない(いや俺あてだけど)ので気がつかなかった。
JavaScriptであるDomへの参照をもったイベントハンドラをつけると、メモリリークするけど、それはメモリリークだと言われてると思う。
あと、RPCごしにピンされてる場合とか。 -
ikeji (ikeji@ostatus.ikeji.ma)'s status on Sunday, 13-Aug-2023 14:45:59 JST ikeji @tadd RPCごしで、実際にあったことがあるのはDBアクセスで、
アプリケーションサーバーがクエリをDBMSに投げて、先頭N件とカーソルオブジェクトをDBMSがアプリケーションサーバーに返して、アプリケーションサーバーはカーソルオブジェクトを元に次のN件を取るか、クエリの終了をDBMSに通知するんだけど、
カーソルオブジェクトは半分アプリケーションサーバー、半分DBMSにある感じで、
アプリケーションサーバーが例外で死ぬとDBMS側が開放されずにたまってく、ってのを見た。 -
斎藤ただし (tadd@best-friends.chat)'s status on Sunday, 13-Aug-2023 14:46:00 JST 斎藤ただし @ikeji なるほどいけじ違い!失礼しました。
イベントハンドラでDOMを持ったままだと、書き換えで無効になったオブジェクトまで参照し続けるから、かな。うーんそっか、なるほど。コンソールでconsole.logしたら残っちゃうよ、っていうのも前見た気がする。
RPC越しは想像できてなかった。処理系一つで考えたらもちろん無理だろうし、複数でうまくやろうとしたって通信の信頼性考えたらなおさら厳しそう。
今年だか去年だか、東大の先生が言語間・FFI越しのメモリ管理ですごいとこに論文通してたけど、ネットワーク透過のRPCはさらに大変そうだね。(そしてほぼ読んでなくてごめんなさい) -
斎藤ただし (tadd@best-friends.chat)'s status on Sunday, 13-Aug-2023 15:31:59 JST 斎藤ただし @ikeji うーんなるほど。その場合はメモリリーク(ヒープ領域が単調増加)以外にもいろいろ関連リソースがありそう。
それはタイムアウトじゃ安易すぎるのかな?行方不明者みたいに、あるアプリサーバIDがしばらく見に来なかったら死亡の扱いにする。あるいは「私は3人目なの」って言われたら2人目以前の分はいいよね、とか。と書くと、n人目案は分散システムだととても厳しそうかな。n-1人目を看取ってn人目が生まれたのを監視する何かは生き続けて、両者の継続性(屋号とか王位継承みたいな??)の判定ができないといけない。
-
ikeji (ikeji@ostatus.ikeji.ma)'s status on Sunday, 13-Aug-2023 15:31:59 JST ikeji @tadd タイムアウトだと長さを適切に設定する必要があるし、
N件目だとすると0からN件を計算しなおす必要があって嫌なんじゃないかな。
DBMSに詳しくないから良い方法があるかもしれないけど。
-