Semaphores là gì và chúng gây ra như thế nào?


8

Gần đây tôi đã bắt đầu gặp vấn đề là Apache của tôi bị hỏng và không thể khởi động lại được. Công ty lưu trữ sau đó nói với tôi rằng nó phải liên quan đến 'semaphores' và gửi cho tôi đoạn trích này để họ giải quyết vấn đề:

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

Bây giờ thật tuyệt khi có một lệnh để thực thi giải quyết vấn đề của tôi nhưng một lần nữa tôi không biết đây là gì.

Semaphores là gì và ai là người đặt chúng, chúng ở đâu và làm thế nào để chúng sụp đổ apache của tôi?

Tôi thực sự vui mừng vì một số giải thích chung!

Câu trả lời:


9

Như những người khác đã nói semaphores là IPC (cấu trúc truyền thông liên tiến trình). Semaphores như tất cả IPC được sử dụng để cho phép các quá trình khác nhau giao tiếp với nhau.

Về cơ bản, chúng là các bộ đếm được tạo, truy cập và hủy bằng các lệnh gọi hệ thống đặc biệt, chẳng hạn như sempost (3), semwait (3), semget (2) và semop (2). Xem sem_overview (7) trên hệ thống linux để biết mô tả ngắn gọn.

Định nghĩa của giao tiếp ở đây là khá nguyên thủy. "Giao tiếp" cho semaphores có nghĩa là đọc, tăng hoặc giảm bộ đếm thông qua các cuộc gọi hệ thống / thư viện được đề cập ở trên.

Điều đặc biệt về semaphores ngoài thực tế là chúng chỉ có một quá trình tại một thời điểm có thể thực hiện một hoạt động trên chúng, và các hoạt động semaphore được đảm bảo nguyên tử , nghĩa là bạn không thể rơi vào tình trạng chạy đua trong một semaphore là kernel sẽ không trao đổi một quá trình đang thực hiện một hoạt động semaphore.

Điều đặc biệt khác là chúng được tạo trong bộ nhớ dùng chung cho phép nhiều tiến trình truy cập chúng.

Cách họ biểu hiện / tạo ra là các chương trình tạo ra chúng bằng semget (2). Ví dụ, apache tạo sempahores khi nó chạy.

ipcs -l sẽ cho bạn biết về tài nguyên ipc của hệ thống.

Bạn có thể thao tác một số giới hạn liên quan đến semaphore và ipc với sysctls. Cố gắng sysctl kernel.semxem các cài đặt liên quan đến sempahore thông qua sysctl. Nếu bạn muốn tiếp tục bất kỳ thay đổi sysctl nào, hãy thử đặt chúng vào /etc/sysctl.conf.


4

Semaphores là một hình thức giao tiếp giữa các quá trình (ipc trong ipcrm). Chúng được cung cấp bởi hệ điều hành và các nhà phát triển của Apache sử dụng chúng để liên lạc giữa các quy trình Apache khác nhau. Chúng không chắc là nguyên nhân gây ra sự cố Apache, nhưng chúng không được phát hành khi nó gặp sự cố, ngăn các phiên bản mới của Apache bắt đầu.

Wikipedia: Semaphore (lập trình)


Ngoài ra còn có một chủ đề về chủ đề trên StackOverflow: stackoverflow.com/questions/34519/what-is-a-semaphore
James Sneeringer

Có một lỗi trong URL của bạn .. URL bị thiếu bên phải) Có vẻ như đó là một lỗi trong phần mềm Serverfault ...
tegbains

càu nhàu Nó nhận được URL ngay trong bản xem trước và bỏ) khi tôi lưu nó.
pss

Cảm ơn cho đến nay. Nhưng chúng là gì, chúng biểu hiện như thế nào? Họ có tập tin, mục trong một bản ghi? Họ phải làm gì với bộ nhớ? Họ có thể được gây ra bởi lập trình php xấu (như công ty lưu trữ của tôi nói với tôi)?
markus

Chúng được chia sẻ bộ nhớ và cấu trúc kernel. PHP không an toàn cho luồng, vì vậy bạn nên sử dụng mô đun đa xử lý prefork của Apache2.
pss
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.