Apa itu semaphore dan bagaimana mereka disebabkan?

8

Saya baru-baru ini mulai mengalami masalah bahwa Apache saya crash dan tidak dapat dimulai kembali. Perusahaan hosting kemudian memberi tahu saya bahwa itu ada hubungannya dengan 'semaphores' dan mengirimi saya potongan ini untuk memecahkan masalah:

/usr/bin/ipcrm sem $(/usr/bin/ipcs -s | grep www-data | awk '{print$2}')

Nah, itu bagus untuk memiliki perintah untuk mengeksekusi yang memecahkan masalah saya tapi sekali lagi saya tidak tahu apa ini semua tentang.

Apa itu semafor dan siapa yang menempatkan mereka, di mana mereka berada dan bagaimana mereka menabrak apache saya?

Saya akan sangat senang untuk beberapa penjelasan umum!

markus
sumber

Jawaban:

9

Seperti yang orang lain katakan semaphore adalah IPC (struktur komunikasi antarproses). Semafor seperti semua IPC digunakan untuk memungkinkan berbagai proses berkomunikasi satu sama lain.

Mereka pada dasarnya adalah penghitung yang dibuat, diakses dan dihancurkan menggunakan panggilan sistem khusus, seperti sempost (3), semwait (3), semget (2) dan semop (2). Lihat sem_overview (7) pada sistem linux untuk deskripsi singkat.

Definisi berkomunikasi di sini cukup primitif. "Berkomunikasi" untuk semafor berarti membaca, menambah atau mengurangi penghitung melalui sistem / panggilan perpustakaan yang disebutkan di atas.

Hal khusus tentang semaphore selain dari fakta bahwa mereka adalah bahwa hanya satu proses pada suatu waktu dapat melakukan operasi pada mereka, dan operasi semaphore dijamin atom , artinya Anda tidak dapat masuk ke dalam kondisi balapan lebih dari satu semaphore sebagai kernel tidak akan menukar proses yang melakukan operasi semaphore.

Hal khusus lainnya adalah mereka dibuat dalam memori bersama yang memungkinkan banyak proses untuk mengaksesnya.

Bagaimana mereka memanifestasikan / dibuat adalah bahwa program membuatnya menggunakan semget (2). Misalnya apache membuat sempahores saat dijalankan.

ipcs -l akan memberi tahu Anda tentang sumber daya ipc sistem.

Anda dapat memanipulasi beberapa batas semaphore sistem dan ipc terkait dengan sysctls. Cobalah sysctl kernel.semuntuk melihat pengaturan terkait sempahore melalui sysctl. Jika Anda ingin tetap ada perubahan sysctl Anda mencoba memasukkannya ke dalam /etc/sysctl.conf.

Jason Tan
sumber
4

Semaphore adalah bentuk komunikasi antar proses (the ipc in ipcrm). Mereka disediakan oleh sistem operasi, dan pengembang Apache menggunakannya untuk komunikasi antara berbagai proses Apache. Mereka tidak mungkin menjadi penyebab crash Apache, tetapi mereka tidak dirilis ketika itu crash, mencegah instance baru dari Apache memulai.

Wikipedia: Semaphore (pemrograman)

pgs
sumber
Ada juga utas tentang subjek ini di StackOverflow: stackoverflow.com/questions/34519/what-is-a-semaphore
James Sneeringer
Ada kesalahan dalam URL Anda .. URL hilang di sebelah kanan) Tampaknya ada bug dalam perangkat lunak Serverfault ...
tegbains
menggerutu Ini mendapatkan URL tepat di pratinjau, dan menjatuhkan) ketika saya menyimpannya.
pgs
Terima kasih sejauh ini Tapi apa mereka, bagaimana mereka bermanifestasi? Apakah itu file, entri dalam log? Apa yang harus mereka lakukan dengan ingatan? Bisakah mereka disebabkan oleh pemrograman php yang buruk (seperti yang dikatakan perusahaan hosting saya)?
markus
Mereka berbagi memori dan struktur kernel. PHP bukan thread-safe, jadi Anda harus menggunakan modul multi-pemrosesan prefork Apache2.
pgs