Apache menggunakan CPU 100%. Bisakah perintah "ps" memberi tahu saya apa yang dilakukannya?

8

Saya memiliki server Linux SLES 10, dan beberapa kali dimaksimalkan oleh Apache menjadi 100% CPU.

Dengan ps axbisa saya lihat, bahwa Apache telah menelurkan ~ 50 proses Apache.

Bisakah misalnya psperintah memberi tahu saya apa yang dilakukan masing-masing proses Apache ini?

Atau mungkin beberapa metode lain sehingga saya bisa melihat halaman web apa yang memicu masalah?

Sandra
sumber

Jawaban:

14

File /etc/httpd/conf/httpd.conf saya memiliki bagian ini:

# Allow server status reports generated by mod_status,
# with the URL of http://servername/server-status
# Change the ".example.com" to match your domain to enable.
#
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from .example.com
    Allow from 127. 192.168.1.
</Location>

Jadi jika saya pergi ke http://192.168.1.1/server-status , saya mendapatkan halaman yang memberitahu saya:

  1. versi server
  2. uptime httpd
  3. penggunaan CPU saat ini
  4. permintaan sedang diproses dan # pekerja menganggur

  5. kotak dari apa yang dilakukan setiap proses
  6. permintaan terbaru

    Status Server Apache untuk 192.168.3.1

    Versi Server: Apache / 2.2.3 (Red Hat)
    Server Dibangun: 14 Juli 2009 06:04:04

    Waktu Saat Ini: Sabtu, 17-Jul-2010 10:20:31
    Waktu Restart CDT : Sabtu, 17-Jul-2010 10:13:12 CDT
    Server Induk Generasi: 0
    Server uptime: 7 menit 19 detik
    Total akses: 51 - Total Lalu lintas: 156 kB
    CPU Penggunaan: u0 s0 cu0 cs0
    .116 permintaan / detik - 363 B / detik - 3132 B / permintaan
    1 permintaan sedang diproses, 7 pekerja menganggur

    __W _____................................................. .......
    ........................................... .....................
    ............................. ...................................
    ............... .................................................

    Papan Skor Kunci:
    "_" Menunggu Koneksi, "S" Memulai, "R" Membaca Permintaan,
    "W" Mengirim Balasan, "K" Keepalive (baca), "D" Pencarian DNS,
    "C" Menutup koneksi, "L "Logging," G "Finishing dengan anggun,
    " Aku "Pembersihan menganggur pekerja,". " Buka slot tanpa proses saat ini

    Srv PID Acc M CPU SS Req Conn Anak Slot Klien VHost Permintaan
    0-0 20715 0/2/2 _ 0,00 418 0 0,01,01 0,01 192.168,3,97 dit DAPATKAN / status server HTTP / 1.1
    1-0 20716 0/49/49 _ 0,00 128 0 0,0 0,15 0,15 192.168,3,97 dit MENDAPATKAN / server-status HTTP / 1.1
    2-0 20717 0/0/0 W 0,00 520222374 0,0 0,00 0,00 192.168,3,97 dit DAPATKAN / server-status HTTP / 1.1

Kevin M.
sumber
Anda mungkin perlu mengatur ExtendedStatus ONuntuk melihat setiap permintaan
TonyUser
3

stracedapat memberi tahu Anda apa proses tertentu yang dilakukan pada tingkat panggilan sistem, tetapi itu tidak akan memberi Anda "tampilan 50 kaki" tentang apa yang terjadi. Anda harus menyatukan panggilan sistem yang digunakannya untuk mencari tahu.

Ignacio Vazquez-Abrams
sumber
2

Jika Anda memiliki situs web dengan backend database maka Anda bisa melihat di DBMS perintah apa yang sedang berjalan. Mungkin ini bisa membantu Anda mempersempit di mana dalam kode situs web Anda beban dihasilkan.

Jika tidak, Anda dapat meningkatkan level log daemon httpd. Kemudian Anda memiliki informasi lebih banyak di log.

Raffael Luthiger
sumber
1

Ada juga ltrace, yang berfungsi seperti strace tetapi dengan panggilan perpustakaan.


sumber
0

Anda mungkin menemukan top lebih informatif daripada ps.

bmargulies
sumber