sidekiq を使用して一部の処理をキューに送信するシステムがあります。これらのプロセスは、画像を操作するプログラムに対してシステム コールを実行することで構成されます。このプログラムのパフォーマンスは非常に悪いです。システムを「トップ」にすると、ほとんどすべての CPU が Ruby によって消費され、イメージ ソフトウェアによってわずかな CPU が消費されます。
5、10、20、30 人のワーカーでテストしようとしました。ワーカーを追加しても処理パフォーマンスは向上しません (値が大きいとさらに悪化します)。
私の労働者は次のようなものです:
def perform(file)
command = "convert -strip -resize 580x580 -quality 90 -sampling-factor 4:2:0 -interlace Plane #{file} #{file}.main"
`#{command}`
end
Ruby でマルチスレッド システム コールを改善する方法はありますか?