Apache 2.2 mpm_worker: lebih banyak utas atau lebih banyak proses?

17

Saat menggunakan Worker MPM di Apache, Anda bisa mengutak-atik jumlah proses anak dan jumlah utas server per proses anak.

Apa kelebihan dan kekurangan masing-masing? Dalam keadaan apa Anda akan meningkatkan satu atau yang lain?

sh-beta
sumber

Jawaban:

25

Sejauh ini, ini telah menjadi pertimbangan utama saya ketika menentukan Thread vs Proses:

  1. Utas akan menggunakan memori residen jauh lebih sedikit daripada Proses. Ya, dengan pustaka yang terhubung secara dinamis, banyak memori dibagi antara Proses Kontrol Apache dan Proses turunannya, namun setiap Proses baru harus membuat instantiate semua modul yang telah Anda aktifkan.

    Ini mudah diuji dengan membandingkan penggunaan memori masing-masing Proses di mana Anda memiliki, misalnya, masing-masing 5 Proses dan 1 Thread masing-masing atau 5 Proses dan 25 Thread masing-masing. Dalam kasus saya di sini, setiap Proses anak membutuhkan sekitar 7 MB terlepas dari jumlah Thread.

    + Untuk Utas

  2. Diperlukan waktu lebih lama untuk memulai dalam hal waktu dan siklus untuk memuat Proses baru daripada yang dilakukan Thread. Ini dapat diuji dengan memverifikasi jumlah rata-rata halaman yang dilayani melalui 'ab'.

    + Untuk Utas

  3. Semua Thread Proses tergantung pada Proses .. Perhatian terbesar di sini, adalah bahwa jika sesuatu terjadi pada Proses itu akan mempengaruhi semua Thread yang terkait dengannya. Jika Anda menjalankan dengan Proses tunggal dengan sekelompok Thread, maka ketika Proses mati juga Thread. Karena itu, lebih banyak proses akan menyebabkan pemisahan yang lebih baik, dan dengan demikian toleransi "kesalahan" yang lebih besar jika Anda mau.

    + Untuk Proses

  4. Terkait dengan (3), untuk modul-modul seperti PHP, memori mereka dimuat oleh Proses dan dibagi di semua Thread. Ini berarti bahwa jika Anda memiliki php dengan memory_limit diatur ke 100Mbs dengan 25 Utas di bawah ini, maka pada beban maks secara teknis setiap Utas akan dapat mengalokasikan maksimum masing-masing 4MB (tentu saja tidak akan terjadi seperti ini, beberapa akan hog, beberapa akan kelaparan ).

Jadi pada akhirnya, itu benar-benar tergantung pada kasus penggunaan Anda .. Karena itu, Anda ingin memaksimalkan jumlah Thread yang digunakan untuk mengurangi penggunaan memori dan meningkatkan daya tanggap. Namun, Anda harus menyeimbangkannya dengan jumlah Proses yang tepat untuk toleransi kesalahan yang lebih baik.

Tentu saja saya bukan ahli di sini karena saya baru-baru ini harus peduli dengan ini, jadi saya berharap untuk melihat jawaban apa yang mungkin muncul di sini!

jonathanserafini
sumber
1
+1 untuk beberapa informasi umum yang baik. Saya ingin melihat detail yang lebih dalam / konkret jika memungkinkan.
sh-beta