Πρόβλημα με [PHP] defunct

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
dal_kos
Δημοσιεύσεις: 38
Εγγραφή: 19 Μάιος 2006 15:21

Πρόβλημα με [PHP] defunct

Δημοσίευση από dal_kos » 18 Ιαν 2011 21:27

Καλησπέρα παιδιά,
Το τελευταίο καιρό, έφτιαξα ένα νέο site, αλλά αντιμετωπίζω διάφορα προβλήματα. Το site είναι ένα από αυτά με τα facebook likes. Η κίνηση που δέχεται είναι συνεχώς αυξανόμενη με την χθεσινή να αγγίζει τα 300k hits. Το πρόβλημα είναι ότι η μνήμη που βλέπω στο cpanel στη καρτέλα resource usage, είναι 50% (!!).
Έτσι λοιπόν θα ήθελα τη βοήθεια σας.

1. Όταν ζήτησα από τον host να μου τρέξει μια TOP sτο σερβερ, μου απάντησε ότι υπήρχαν αρκετές διεργασίες σε κατάσταση defunct, που απ' ό,τι ανέφερε οφείλεται σε κακό προγραμματισμό.

Το έψαξα τι σημαίνει στο google, και οι περισσότερες πληροφορίες αφορούσαν κακό στήσιμο σερβερ.

Επίσης κάτι άλλο που μου έκανε εντύπωση είναι ότι ενώ χθες το cpanelμου έβγαλε συνολική μέση χρήση RAM 50% ο σερβερ στο "Service status" ποτέ δεν ανέβηκε πάνω από 30%, κάτι το οποίο μου κάνει μεγάλη εντύπωση.

Θα ήθελα τα φώτα σας στα εξής:
1. Τι είναι το defunct τελικά?
2. Μπορεί η χθεσινή χρήση να προκάλεσε πράγματι μέσο φόρτο 2 gb στην RAM? Μιλάμε για σελίδες που τραβάνε δυο λίστες 15 στοιχείων από μια database. Δεν έχει κάτι το ιδιαίτερο δηλαδή. Μέσο μέγεθος σελίδας 30Kb
3. Μήπως τελικά το cpanel δείχνει ό,τι θέλει?

Ευχαριστώ πολύ για το χρόνο σας και για τη φιλοξενία.
Συγγνώμη αν το τοποθέτησα σε λάθος τοπικ, αλλά ήταν το πιο σχετικό που βρήκα.
Φιλικά,
Κώστας

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Πρόβλημα με [PHP] defunct

Δημοσίευση από dva_dev » 18 Ιαν 2011 22:12

Νομίζω ότι τα παιδιά εδώ το εξηγούν μια χαρά.
A "defunct" is also known as a "zombie". It means that it's finished - but still depends on a "parent" which is still alive.

When a child process dies, the parent will receive a notification. It is then the duty of the parent process to explicitly take notice of the childs demise by using the wait() system call. The return value of the wait() is the process ID of the child, which gives the parent exact control about which of its children are still alive.

As long as the parent hasn't called wait(), the system needs to keep the dead child in the global process list, because that's the only place where the process ID is stored. The purpose of the "zombies" is really just for the system to remember the process ID, so that it can inform the parent process about it on request. If the parent "forgets" to collect on its children, then the zombie will stay undead forever. Well, almost forever. If the parent itself dies, then "init" (the system process with the ID 0) will take over fostership over its children and catch up on the neglected parental duties.
Με απλά λόγια κάποια από τις εφαρμογές/cgi/fcgi scripts που χρησιμοποιείς είναι φτιαγμένη από τον κόμη Δράκουλα (ή κάποιον συγγενή του). Kάνε (έτσι για το θεαθήναι) ένα code review στον δικό σου κώδικα, και μετά ψάξε για κάποιο εξιλαστήριο θύμα.

dal_kos
Δημοσιεύσεις: 38
Εγγραφή: 19 Μάιος 2006 15:21

Πρόβλημα με [PHP] defunct

Δημοσίευση από dal_kos » 21 Ιαν 2011 18:02

Ευχαριστώ πολύ για την απάντηση.
Τελικά το site το μετέφερα σε VPS, όπου και διαπίστωσα ότι τελικά το cpanel εδειχνε ό,τι ήθελε αφού με όλη την εγκατάσταση LAMP και σε μεγάλο φόρτο εργασίας δεν ανεβαίνω πάνω από 400 MB[καμία σχέση με τα θεωρητικά 2gb του cpanel]

Οι defunct διεργασίες, εμφανίζονται μόλις τελειώνει το τρέξιμο των php scipts, αλλά δεν μου δημιουργούν κάποιο πρόβλημα, αφού περιορίζονται σε 5 το πολύ ταυτόχρονες.

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

Πρόβλημα με [PHP] defunct

Δημοσίευση από pimpogio » 26 Ιαν 2011 22:12

φτιαξε τον κωδικα σου καλυτερα..

dal_kos
Δημοσιεύσεις: 38
Εγγραφή: 19 Μάιος 2006 15:21

Πρόβλημα με [PHP] defunct

Δημοσίευση από dal_kos » 27 Ιαν 2011 03:03

pimpogio έγραψε:φτιαξε τον κωδικα σου καλυτερα..
Τον κώδικα τον έχω βελτιώσει όσο μπορούσα. Defunct πλέον δεν βλέπω στο νέο σερβερ, εκτός αν τρέξω το apache benchmark με 100 ταυτόχρονες συνδέσεις οπότε ίσως βγάλει 1 defunct.

Πιθανόν ο κώδικας να έχει πράγματι ακόμα πρόβλημα, αλλά που έψαξα, δεν μπόρεσα να βρω κάποιον άμεσο συσχετισμό των defunct διεργασιών, με την php. Δηλαδή κάποιο προγραμματιστικό λάθος που θα μπορούσε να οδηγήσει τη διεργασία να μπει σε κατάσταση defunct.

Αν γνωρίζετε κάτι παραπάνω φυσικά και είναι ευπρόσδεκτη η άποψη σας!

Κώστας

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες