Jan
04
2011
You can use vim to crash a server

Το παρόν post αφορά κυρίως sysadmins, οι υπόλοιποι διαβάστε το για να πάρετε μια ιδέα πως είναι να εργάζεσαι ως sysadmin.

Διαβάζοντας το εξής άρθρο: Henry’s Techno-Musings: Philosophy of Troubleshooting: Sea of Troubles (ξέρω, ξέρω πολύ μεγάλος τίτλος. Μα είναι στο linux gazette, οπότε δώστε του μια ευκαιρία) θυμήθηκα κάτι από το 2006 όταν ξεκίνησα να εργάζομαι στην τωρινή μου θέση.

Πριν εξιστορήσω όμως την ιστορία, θα πρέπει να τονίσω ότι κάθε sysadmin που σέβεται τον εαυτό του ή θέλει να τον σέβονται οι άλλοι, θα πρέπει να γνωρίζει τι είναι τα semaphores ειδικά δε, εάν εργάζεται με τον apache web server.

[story]
Περί το τέλος του 2006 σε ένα ξεχασμένο datacenter, ένας ταπεινός sysadmin εργάζεται στο γραφείο του. Με ζήλο για την δουλειά του, νέος στον συγκεκριμένο χώρο, προσπαθεί να μαζέψει όλες τις απαραίτητες πληροφορίες ώστε να επιλύσει ένα πρόβλημα που ταλάνιζε πελάτες κι άλλους ταπεινούς sysadmins. Ο apache δεν δούλευε σωστά! Κι έτσι ο ταπεινός μας sysadmin σκέφτηκε να ρίξει μια ματιά στα logs. Θέλοντας τα δείξει ότι γνωρίζει τα μυστικά του vim, προσπάθησε να ανοίξει δύο log αρχεία με μία εντολή κι έτσι έγραψε:


vim -O logfile1 logfile2

Δεν κοίταξε όμως ποτέ το μέγεθος των αρχείων. Δεν είδε ποτέ ότι το κάθε αρχείο ήταν περίπου 2 με 2.5 gb και δεν κατάλαβε ποτέ γιατί ξαφνικά η ελεύθερη 4gb μνήμη γέμισε σε μερικά δευτερόλεπτα. Επίσης Δεν μπόρεσε να εξηγήσει εκείνη την στιγμή γιατί ο server έγινε κόκκινος στο monitor.
Σκέφτηκε ότι δεν μπορεί να φταίει αυτός, αυτός ένα vim άνοιξε!
Αλλά εν τέλη είχε καταφέρει να κρασάρει τον web server.

[/story]

Φυσικά κι αυτός ήμουν εγώ (σε άλλο άρθρο θα σας γράψω άλλη παρόμοια ιστορία).
Φυσικά από το τότε λάθος, έμαθα. Δεν είναι όμως πρέπον να μαθαίνεις μόνο από λάθη,
χρειάζεται να μαθαίνουμε κι από τα σωστά και τις εμπειρίες των άλλων.

Επίλογος:

Για επίλογο θα σας δώσω τρεις εντολές και πως χρησιμοποιούνται.

Το πρόβλημα είναι ότι ο apache έχει τερματιστεί και δεν σηκώνεται ή δεν έχει τερματιστεί καλά ή whatever, δεν παίζουν οι ινδιάνοι.

01.


lsof | egrep --color -i 'http|apache'

Βλέπουμε τα ανοιχτά αρχεία που έχουν δεσμευτεί από τον web server μας.

02.


ipcs -s

Χρειαζόμαστε την 2η στήλη με τα semid. Βλέπουμε ποιοι πόροι του συστήματός μας είναι δεσμευμένοι από τον web server μας.

03.


ipcrm -s SEMID

Αποδεσμεύουμε τον συγκεκριμένο πόρο από το σύστημά μας. Φυσικά μπορεί να χρειαστούν πολλά ipcrm και φυσικά πρέπει να αντικαταστήσετε το SEMID με το πραγματικό, αυτό που έχετε δει από το ipcs.

  1. Avatar di istoselidas istoselidas

    Tuesday, January 4, 2011 - 21:15:13

    Πολύ χρήσιμη η ιστορία και οι εντολές! Thanks.

    Κανέναν τρόπο να ανοίγεις τόσο μεγάλα αρχεία έχεις βρει; Έχω δοκιμάσει με πάρα πολλούς editors (και σε linux και σε windows) χωρίς επιτυχία (εντάξει το ξέρω οτι δε χρειάζεται να τα ανοίγεις αυτά τα logs, απλά για το “γαμώτο” που λένε).

    Για άνοιγμα logs χρησιμοποιώ την tails -f (follow για να εμφανίζει τις νέες αλλαγές).

  2. Avatar di ebal ebal

    Wednesday, January 5, 2011 - 05:46:31

    Η εντολή είναι tail -f (έβαλες ένα S παραπάνω). Χρησιμοποιώ λίγο παραπάνω από όσο πρέπει την less. Με την παράμετρο -F είναι παρόμοια με το tail -f κι επίσης έχεις έναν pager στα χέρια σου που υποστηρίζει regular expressions για να βρεις την πληροφορία που θέλεις. Τα πολύ δύσκολα κομμάτια τα κάνω με sed & awk.

    Δεν έχω βρει όμως κάτι χρήσιμο όταν έχω ένα συμπιεσμένο αρχείο log που έχει φτάσει στα > 500ΜΒ κι ασυμπίεστο μπορεί να είναι και πάνω από 5gb.
    Για συμπιεσμένα υπάρχουν πάλι οι zless, zcat, zgrep κ.α.