Ich habe einige Probleme mit Java-Prozess und NRPE-Prüfungen. Wir haben einige Prozesse, die manchmal 1000% CPU auf einem 32-Kern-System verwenden. Das System reagiert ziemlich schnell, bis Sie a
ps aux
oder versuche irgendetwas in der / proc / pid # zu machen
[[email protected] /proc/18679]# ls
hangs..
Eine Spur von ps aux
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2819, ...}) = 0
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2819, ...}) = 0
stat("/dev/pts1", 0x7fffb8526f00) = -1 ENOENT (No such file or directory)
stat("/dev/pts", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
readlink("/proc/15693/fd/2", "/dev/pts/1", 127) = 10
stat("/dev/pts/1", {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 1), ...}) = 0
write(1, "root 15693 15692 0 06:25 pt"..., 55root 15693 15692 0 06:25 pts/1 00:00:00 ps -Af
) = 55
stat("/proc/18679", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/18679/stat", O_RDONLY) = 5
read(5, "18679 (java) S 1 18662 3738 3481"..., 1023) = 264
close(5) = 0
open("/proc/18679/status", O_RDONLY) = 5
read(5, "Name:\tjava\nState:\tS (sleeping)\nT"..., 1023) = 889
close(5) = 0
open("/proc/18679/cmdline", O_RDONLY) = 5
read(5,
Der Java-Prozess funktioniert und wird problemlos abgeschlossen. Das Problem ist jedoch, dass unsere Überwachung nicht mehr funktioniert, da es zu Zeitüberschreitungen kommt, bis ein PS-Aux-Vorgang abgeschlossen ist.
Ich habe versucht, so etwas zu tun
nice -19 ionice -c1 /usr/lib64/nagios/plugins/check_procs -w 1:1 -c 1:1 -a 'diamond' -u root -t 30
ohne glück
BEARBEITEN
Systemspezifikationen
- 32-Kern Intel (R) Xeon (R) -CPU E5-2650 0 bei 2,00 GHz
- 128 g Widder
- 12 4 TB 7200-Laufwerke
- CentOS 6.5
- Ich bin nicht sicher, ob das Modell, aber der Anbieter ist SuperMicro
In diesem Fall beträgt die Belastung 1 Minute lang etwa 90-160 Fisch.
Der seltsame Teil ist, dass ich in jede andere / proc / pid # gehen kann und es funktioniert einwandfrei. Das System reagiert, wenn ich einspringe. Wie wenn wir über hohe Auslastung informiert werden, kann ich gut einspringen.
Noch eine Bearbeitung
Ich habe Deadline für Scheduler verwendet
[[email protected] ~]# for i in {a..m}; do cat /sys/block/sd${i}/queue/scheduler; done
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq
Mount sieht aus wie
[[email protected] ~]# mount
/dev/sda3 on / type ext4 (rw,noatime,barrier=0)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext2 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/sdb1 on /disk1 type xfs (rw,nobarrier)
/dev/sdc1 on /disk2 type xfs (rw,nobarrier)
/dev/sdd1 on /disk3 type xfs (rw,nobarrier)
/dev/sde1 on /disk4 type xfs (rw,nobarrier)
/dev/sdf1 on /disk5 type xfs (rw,nobarrier)
/dev/sdg1 on /disk6 type xfs (rw,nobarrier)
/dev/sdh1 on /disk7 type xfs (rw,nobarrier)
/dev/sdi1 on /disk8 type xfs (rw,nobarrier)
/dev/sdj1 on /disk9 type xfs (rw,nobarrier)
/dev/sdk1 on /disk10 type xfs (rw,nobarrier)
/dev/sdl1 on /disk11 type xfs (rw,nobarrier)
/dev/sdm1 on /disk12 type xfs (rw,nobarrier)
Ok, ich habe versucht, tuned zu installieren und habe es auf Durchsatzleistung eingestellt.
[[email protected] ~]# tuned-adm profile throughput-performance
Switching to profile 'throughput-performance'
Applying deadline elevator: sda sdb sdc sdd sde sdf sdg sdh[ OK ] sdk sdl sdm
Applying ktune sysctl settings:
/etc/ktune.d/tunedadm.conf: [ OK ]
Calling '/etc/ktune.d/tunedadm.sh start': [ OK ]
Applying sysctl settings from /etc/sysctl.d/99-chef-attributes.conf
Applying sysctl settings from /etc/sysctl.conf
Starting tuned: [ OK ]
mount
aus?tuned-adm profile enterprise-storage
Ziehen Sie in Betracht, den Befehl für den Nobarrier- und Deadline-Schalter zu verwenden. Was zeigt diedmesg|tail
Ausgabe? Sehen Sie E / A-Zeitüberschreitungen?Antworten:
Im Allgemeinen habe ich gesehen, dass dies aufgrund einer festgefahrenen Lesung passiert ist. Dies wird durch Ihre
strace
Ausgabe bestätigt . Der Versuch, die Datei / proc / xxxx / cmdline zu lesen, hängt, während Sie denps aux
Befehl ausführen .Die momentanen E / A-Spitzen belasten die Systemressourcen. Eine Last von 90-160 ist eine äußerst schlechte Nachricht, wenn es sich um ein Speichersubsystem handelt.
Können Sie uns für das Speicherarray mitteilen, ob ein Hardware-RAID-Controller vorhanden ist? Ist die primäre Anwendung auf dem Server schreibgeschützt? Die von Ihnen genannten Festplatten (12 x 4 TB) sind Nearline-SAS- oder SATA-Festplatten mit niedrigerer Geschwindigkeit. Wenn vor dem Laufwerksarray keine Form des Schreibcaches vorhanden ist , können Schreibvorgänge die Systemlast nach oben drücken. Wenn es sich um reine SATA-Laufwerke auf einer Supermicro-Rückwandplatine handelt, schließen Sie die Möglichkeit anderer Festplattenprobleme ( Zeitüberschreitungen, Ausfall von Laufwerken, Rückwandplatinen usw. ) nicht aus. Tritt dies auf allen Hadoop-Knoten auf?
Ein einfacher Test besteht darin, zu versuchen,
iotop
währenddessen auszuführen . Haben Sie, da dies EL6.5 ist, eine dertuned-adm
Einstellungen aktiviert? Sind Schreibbarrieren aktiviert?Wenn Sie den E / A-Aufzug des Servers nicht geändert
ionice
haben , kann dies Auswirkungen haben. Wenn Sie es in etwas anderes als CFQ geändert haben ( dieser Server sollte wahrscheinlich zum Stichtag sein ),ionice
wird dies keinen Unterschied machen.Bearbeiten:
Eine andere seltsame Sache, die ich in Produktionsumgebungen gesehen habe. Dies sind Java-Prozesse, und ich gehe davon aus, dass sie stark multithreaded sind. Wie geht es dir mit PIDs? Was ist der
sysctl
Wert für kernel.pid_max ? Ich hatte schon einmal Situationen, in denen ich PIDs erschöpft hatte und eine hohe Last hatte.Außerdem erwähnen Sie die Kernel-Version 2.6.32-358.23.2.el6.x86_64 . Das ist über ein Jahr alt und Teil der CentOS 6.4-Version, aber der Rest Ihres Servers ist 6.5. Haben Sie Kernel-Updates in yum.conf gesperrt? Sie sollten wahrscheinlich auf Kernel 2.6.32-431.xx oder neuer für dieses System sein. Möglicherweise liegt ein großes Problem mit dem älteren Kernel vor . Wenn Sie den Kernel nicht ändern können, deaktivieren Sie ihn mit:
echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
.quelle
3a0613065fa Adaptec \ 71605 \ SATA/SAS RAID
ich überprüft habe, dass es sich auch um SATA-Laufwerke handeltWestern Digital WD RE WD4000FYYZ
echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
auf einem betroffenen Computer. Ich gehe davon aus, dass dies reproduzierbar genug ist, dass Sie mit dieser Einstellung ein Vorher / Nachher beobachten können.Das Problem ist eindeutig kein festplattenbezogenes Problem. Und das geht aus der aufgehängten Straße hervor:
/ proc ist eine Schnittstelle zwischen Kernel und Userspace. Es berührt die Festplatte überhaupt nicht. Wenn etwas beim Lesen der Argumente eines Befehls aufgehängt wird, handelt es sich normalerweise um ein Kernel-Problem und wahrscheinlich nicht um ein Speicherproblem. Siehe @kasperd Kommentar.
Die Belastung ist nur ein Nebeneffekt des Problems und die hohe Anzahl sagt nicht die ganze Geschichte aus. Sie könnten einen Server mit sehr hoher Auslastung haben, auf dem sich die Anwendung fehlerfrei verhält.
Sie können weitere Informationen darüber erhalten, was passiert
cat /proc/$PID/stack
. Wo$PID
ist die Prozess-ID, an der der Lesevorgang unterbrochen wird?In Ihrem Fall würde ich mit einem Kernel-Upgrade beginnen.
quelle
/proc/%d/cmdline
wird der Teil des Adressraums des Prozesses zurückgegeben, in dem der Kernel die Befehlszeile während desexecve
Aufrufs gespeichert hat . Wie jeder andere Teil des Benutzerraums kann er ausgetauscht werden. Wenn Sie also darauf zugreifen, müssen Sie möglicherweise warten, bis die Seite wieder eingelagert wird.Trotz aller Optimierungen und eines Upgrades auf den neuesten 2.6-Kernel, den CentOS bereitstellt, blieben die Probleme weiterhin bestehen. Nicht so viel wie zuvor, aber immer noch zu sehen.
Das Update bestand darin, auf den Kernel der 3.10.x-Serie zu aktualisieren, den CentOS in seinem Centosplus-Repo hier bereitstellt
http://mirror.centos.org/centos/6/xen4/x86_64/Packages/
Dies hat alle Prozessbaum-Hänge beseitigt. Wie ich schon sagte, das System war nicht unter einer verrückten Last, bei der das Ausführen neuer Prozesse nicht bissig war. Die meisten sind also irgendwo ein 2.6er Kernel-Problem.
quelle
Dies ist ein weiterer Fix.
Sieht so aus, als würden wir den folgenden RAID-Controller ausführen
Ich habe Firmware-Updates für alle betroffenen Computer auf die neueste Version durchgeführt und das Problem scheint behoben zu sein.
Wir mussten ein Downgrade vom 3.10-Kernel-Experiment durchführen, da andere zufällige Probleme bei der Installation von 3.10 unter CentOS 6 auftraten. Dieses Problem wurde jedoch durch das Firmware-Upgrade behoben.
quelle