問題タブ [celluloid]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - Sidekiq が古い接続を閉じないのはなぜですか?
私の Rails 4.1 アプリケーションは、Sidekiq を使用して Celluloid アクターで測定を実行します。データベース接続が絶えず不足しています。Sidekiq はジョブごとに 2 つの接続を開き、古い接続は正しく閉じられないようです。
システムの機能
- 15分ごとに、私は
MeasurementWorker
. 呼び出すことによってMeasurementWorker.perform_async(measurement.id)
。これは次のことを行います。
- この測定内で、 を呼び出すと、次のよう
.run
になります。
- は
MeasurementConnection
単純なセルロイド アクターです。このアクター内には AR 関連のコードはありません。
構成
- ユニコーン: 同時実行数を 3 に設定
- Sidekiq 3.3.0: 同時実行数を 50 に設定し、初期化子で:
database.yml
: プールは 60 に設定され、リーピング頻度は 5 です- PostgreSQL 9.3: 最大接続数は 2000、その他の変更はありません
問題: 開いている接続が多すぎる
を確認するSELECT * FROM pg_stat_activity;
と、Sidekiq ワーカーがビジー状態で開いている古い接続と、新しい接続があることがわかります。
全部で 34 の接続がありますが、測定を実行したのは 15 回だけです。
ではsidekiq.log
、すべて完了として表示されます。
そのため、測定ごとに、Sidekiq は 2 つの接続を開いているように見えますが、それらを閉じることはありません。私は何をすべきか?
ruby - Rubyの将来のバッファ?
たくさんの XML を取得して解析したいと考えています。それらはやや大きいです。だから私はこのような将来的にそれらを取得して解析できると思っていました:(私は現在セルロイドを使用しています)
実際に必要になる前に大量のメモリを消費することがなければ、これは問題ありません。理想的には、3 つの XML ファイルをバッファリングして停止し、少なくとも 1 つが処理されるまで待ってから続行することを望んでいます。どうすればいいですか?
ruby - Celluloid::アプリのデーモン化後に通知が失敗する
私は Celluloid::Notifications の発行/購読を使用して、2 つのアクター間の通信を行っています。アプリを正常に実行しているときはすべて正常に動作しますが、バックグラウンドで実行しようとすると、サブスクライブしているアクターが通知を受信できません。通知を壊しているように見えるすべてをデーモン化するために、さまざまな宝石を試しました。
このアプリは nohup で実行すると機能するため、この問題はデーモン化プロセスの一部であるフォークに関係していると思われます。
ruby-on-rails - Celluloid でアクターを動的に割り当てる
の使い方を学んでいますCelluloid
。私はすべてのドキュメントを読み、それを使用する方法についてのアイデアはあると思いますが、練習が不足しています。ほぼ 12,000 行の CSV ファイルでテストしようとしています。
1 つのジョブにアクターを何人割り当てればよいかわかりません。この数は動的でなければならないと思います。この Railscasts エピソードによると、デフォルトの数はマシンのコア数に設定されていますが、ワークロードに基づいてこの数を変更する必要がありますか?
12,000 件のレコードを処理する必要があります。以下のコードを実行すると、プール内のすべてのアクターが開始され、ジョブを処理するためにキューに入れられると思います。しかし、作品に動的に割り当てるアクターの数をどのように測定すればよいでしょうか?
私の理解にはまだ多くの穴がありますので、私の実装全体に気軽に挑戦してください。
ruby - Ruby: リモート WebSocket に接続する
Celluloid および Celluloid に基づく Websocket クライアント ( gem 'celluloid-websocket-client' ) を使用してリモート Websocket に接続しようとしています。このクライアントの主な利点は、ブロックの代わりにクラス メソッドの形式でコールバックを使用できることです。
期待される出力は
ただし、まったく出力が得られません。何が問題なのですか?
私は使っている
ruby-on-rails - EC2 sidekiq へのデプロイ後、SocketError: getaddrinfo: Name or service notknown が報告されるようになりました
アプリケーションは Rails 4.1.4、Ruby 2.1.2 です。
sidekiq 3.2.6、redis 3.1.0、セルロイド 0.15.2 を使用。sidekiq の実装は、リモート redis キュー (エラスティック キャッシュ) への接続を除いて、可能な限りデフォルトです。
特定のイベントが処理されるとき、sidekiq を使用して外部 API への呼び出しをキューに入れます。この API は、アプリケーションがホストされているサーバーから curl を介して到達できます。他のすべての機能は、まだ期待どおりに実行されているようです。この機能は、現在のサーバー実装/アーキテクチャで数週間機能しています。
エラスティック ロード バランサーの背後にある EC2 インスタンスへのデプロイ (Jenkins を介した Capistrano を使用) が成功した後、自動スケーリング グループ sidekiq は Elasticcache に接続 (?) しなくなります。
sidekiq を再起動し、エラスティック キャッシュを再起動し、サーバーを再起動し、redis-cli で redis キューを検査しましたが、注目に値するものは何もありませんでした。
暗示されているように、redis-cli を使用してエラスティック キャッシュに接続できますがsidekiq/api
、コンソールから使用しても同じ結果が得られますSocketError
改善する方法についてのアイデアはありますか?この時点で、アプリケーションはほとんど使用できません。
ありがとう!