
Ich hatte in letzter Zeit einige Probleme mit der Serverleistung. Derzeit betreiben wir einen Fedora-Server mit 4 GB und 160 GB Festplattenspeicher. Mit all den Dateien, die wir an Bord haben, stoßen wir die Kapazität der Festplatte ziemlich an. Wir betreiben mehrere Websites mit mehreren Backups für jede Website. Allerdings hat nur eine Website tatsächlich Traffic. Es ist eine E-Commerce-Site mit vielen Besuchern.
In letzter Zeit gab es langsame Ladezeiten und ich merke, dass unser freier Speicher sehr knapp wird (unter einem GB). Ich werde den Server neu starten (was ich jetzt dreimal am Tag tun muss) und alles wird in Ordnung sein. Wir beginnen mit 2,2 GB freiem Speicher, aber nach 3 oder 4 Stunden merkt man, dass der Speicher voll ist und die Ladezeiten immer langsamer werden. Ich kann nicht herausfinden, woher das kommt oder ob es einfach Zeit ist, auf einen besseren Server zu aktualisieren. Ich möchte einfach nicht aktualisieren und dann feststellen, dass ich irgendwo einen Engpass bei MySQL-Anfragen habe.
Ich bin für alle Ideen und Vorschläge dankbar.
BEARBEITEN-
Es gibt auch 3 virtuelle Hosts und ich habe weit über 60.000 Dateien.
total used free shared buffers cached
Mem: 4003 3372 630 0 398 1717
-/+ buffers/cache: 1256 2746
Swap: 8189 0 8189
21:21:49 up 46 min, 1 user, load average: 3.75, 4.20, 4.03
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 2 0 592728 409640 1838360 0 0 165 411 953 473 9 8 47 36 0
Und hier ist der Top-Schnappschuss.
1356 mysql 20 0 1374m 219m 5320 S 5.6 5.5 14:06.21 mysqld
15796 root 20 0 103m 20m 440 D 1.0 0.5 0:04.42 sendmail
1081 root 20 0 103m 20m 440 D 0.7 0.5 0:21.73 sendmail
24013 root 20 0 97416 22m 2648 D 0.7 0.6 0:15.15 mailq
1525 root 20 0 247m 7980 3472 S 0.3 0.2 0:06.88 vlogger (access
1530 apache 20 0 539m 13m 3008 S 0.3 0.3 0:03.56 httpd
2399 apache 20 0 539m 12m 2748 S 0.3 0.3 0:00.85 httpd
5763 root 20 0 121m 4932 3868 S 0.3 0.1 0:00.07 sshd
12326 apache 20 0 539m 12m 2992 S 0.3 0.3 0:00.38 httpd
12421 apache 20 0 539m 12m 2988 S 0.3 0.3 0:00.45 httpd
16396 apache 20 0 538m 12m 2284 S 0.3 0.3 0:00.09 httpd
17050 root 20 0 15368 1256 868 R 0.3 0.0 0:00.09 top
1 root 20 0 37336 4104 1908 S 0.0 0.1 0:02.82 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.03 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/u:0
7 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/u:0H
8 root RT 0 0 0 0 S 0.0 0.0 0:00.11 migration/0
9 root RT 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0
10 root RT 0 0 0 0 S 0.0 0.0 0:00.14 migration/1
12 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0H
13 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/1
14 root RT 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/1
15 root RT 0 0 0 0 S 0.0 0.0 0:00.15 migration/2
17 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/2:0H
18 root 20 0 0 0 0 S 0.0 0.0 0:00.03 ksoftirqd/2
19 root RT 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/2
20 root RT 0 0 0 0 S 0.0 0.0 0:00.11 migration/3
22 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/3:0H
23 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/3
24 root RT 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/3
25 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 cpuset
26 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
27 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
28 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
29 root 20 0 0 0 0 S 0.0 0.0 0:00.00 xenwatch
Antwort1
Steigern Sie den SAR-Wert und geben Sie die PS-Tabelle jede Minute aus. Siehe meine ausführliche AntwortHier.
Wenn der Server das nächste Mal abstürzt, verwenden Sie sar -r
zur SucheWannes ist passiert. Verwenden Sie nun die Ausgabe von ps-cronjob oder von meinemPerl-Wrapper für PS auf GitHub, um herauszufinden, welcher Prozess der Übeltäter gewesen sein könnte.
Angenommen, der Server ist zwischen 12:00:00 und 13:00:00 abgestürzt. Verwenden Sie sar -r -s 12:00:00 -e 13:00:00
. Daraufhin sollten Sie einen Spitzenwert in den Daten sehen. (Wenn es einfacher ist, gibt es ein Java-basiertes Dienstprogramm zum Erstellen von Diagrammen, aber normalerweise lohnt sich der Aufwand nicht.) Angenommen, Sie sehen einen Spitzenwert (oder einen Tiefpunkt) um 12:15. Durchsuchen Sie nun die in Spalten sortierte PS-Ausgabe für einen Zeitraum zwischen beispielsweise 12:00 und 12:15, sortieren Sie sie nach PID und dann nach Zeit und sehen Sie sich die Speicherspalten an:
awk '/^=== .* 12:00:/,/^=== .* 12:16:/' /var/log/sa/ps/today |
sort -k 1n -k 16
(Die Sortieroptionen gehen davon aus, dass die Zeit in Spalte 16 steht, was der Fall sein kann, aber nicht muss.) Jetzt können Sie diese Ausgabe erneut durch awk filtern, um Unterschiede zwischen den Ausgabezeilen zu finden:
... | awk 'lastpid && lastpid==$1 && last != $0 { print} /^[0-9]/ { lastpid=$1;last=$0; }'
Das ist ein ziemlich grober Filter. Für einige Prozesse (deren Befehlszeile sich ständig ändert, wie z. B. bei mysql, postgresql und snmpd) ist das nicht sehr hilfreich, aber hoffentlich können Sie das awk so optimieren, dass Sie den/die Übeltäter finden.