Mencegah pekerjaan latar belakang tertunda_job memakan terlalu banyak CPU di satu server

Aplikasi My Rails memiliki sejumlah tugas yang dipindahkan ke proses latar belakang, seperti mengubah ukuran gambar dan mengunggah ke S3. Saya menggunakan delayed_job untuk mengelola proses ini.

Proses ini, khususnya pembuatan thumbnail PDF (menggunakan Ghostscript) dan mengubah ukuran gambar (menggunakan ImageMagick), memerlukan banyak CPU dan sering kali menghabiskan 100% waktu CPU. Karena pekerjaan ini berjalan di server (RedHat Linux) yang sama dengan aplikasi web itu sendiri, serta DB, hal ini dapat menyebabkan aplikasi web kita menjadi tidak responsif.

Salah satu solusinya adalah dengan mendapatkan server lain yang hanya menjalankan pekerjaan latar belakang. Saya kira ini akan menjadi solusi optimal? Namun, karena ini bukan sesuatu yang dapat saya lakukan dengan segera, saya bertanya-tanya apakah mungkin membuat pekerjaan latar belakang berjalan pada prioritas sistem operasi yang lebih rendah, dan karenanya mengonsumsi lebih sedikit siklus CPU dalam melakukan pekerjaannya?

Pikiran dihargai.


person Olly    schedule 27.08.2009    source sumber


Jawaban (1)


Kalau tidak salah, delayed_job menggunakan proses pekerja yang akan menangani semua pekerjaan latar belakang. Seharusnya mudah untuk mengubah prioritas penjadwalan OS dari proses saat Anda memulainya.

Jadi, alih-alih, misalnya:

ruby script/delayed_job -e production -n 2 start

mencoba:

nice -n 15 ruby script/delayed_job -e production -n 2 start
person molf    schedule 27.08.2009
comment
Poin bonus jika ada yang bisa mengetahuinya menggunakan Delayed_job_args dengan Capistrano. - person Chuck Bergeron; 06.03.2012
comment
Itu tidak menggunakan delayed_job_args, tapi ini menyelesaikan pekerjaannya: stackoverflow.com/a/9928720/359957 - person James Chevalier; 18.04.2014