Sherlock!
Sobald Sie das Unmögliche beseitigt haben, muss alles, was noch so unwahrscheinlich ist, die Wahrheit sein. --Arthur Conan Doyle
Vielleicht möchten Sie zuerst diesen Vortrag lesen, in dem es um die Ursachen von Leistungsproblemen und deren Diagnose geht. Es vergleicht Linux mit SmartOS, das vom Punkt Ihres Beitrags getrennt ist, hilft aber auch dabei, herauszufinden, woher Leistungsprobleme stammen.
Wenn Sie Leistungsprobleme mit Software debuggen, sollten Sie normalerweise versuchen, genau dieselbe Softwarekonfiguration auf einem separaten physischen Computer mit derselben Java-Version, demselben Kernel, demselben Benutzerland usw. zu replizieren. Wenn das Leistungsproblem nicht besteht Dann können Sie sich mit physischer Hardware, Hypervisor / Container-Schicht oder Installationsproblemen auf Ihrer Box befassen.
Wenn der Benutzer diese Software noch nie in dieser bestimmten Betriebssystem- / Versionskonfiguration ausgeführt hat, kann er nicht sofort behaupten, dass es sich um Ihren Server handelt. Ich würde ihnen lieber die Beweislast auferlegen , um zu demonstrieren, dass sie mit CentOS 6 (mit derselben Nebenversion und demselben Hypervisor und demselben Host-Betriebssystem, wenn es nicht auf Bare-Metal läuft) eine bessere Leistung erzielen können.
Wenn die bessere Leistung darauf zurückzuführen ist, dass sie über viel bessere Systemspezifikationen verfügen (z. B. auf einem 1-GB-KVM auf einem Low-End-Prozessor in Ihrer Infrastruktur, aber auf einem eigenen 24-Kern-Ivy-Bridge-E5-System mit 8 PCIe-SSDs) Hardware RAID0, es ist 1000% schneller), dann können Sie anfangen, über physische Hardware zu sprechen. Wenn die physische Hardware identisch oder sehr, sehr ähnlich ist, können Sie über die Konfiguration des Betriebssystems / Hypervisors sprechen.
Sie können auch die Möglichkeit in Betracht ziehen, dass basierend auf der Leistung der Anwendung und der Anzahl der Benutzer sowie der Datenauslastung die dem Benutzer zugewiesene Hardware für die Aufgabe einfach nicht ausreicht. Wenn dies ein sehr wichtiger Kunde ist und es für Ihr Unternehmen von entscheidender Bedeutung ist, ihn bei Laune zu halten, können Sie versuchen, einige der Einschränkungen aufzuheben, die Sie möglicherweise für den virtuellen Container oder die VM-Instanz auferlegen. Geben Sie ihnen beispielsweise vorübergehend mehr RAM- oder CPU-Zeit, Netzwerkbandbreite usw. und prüfen Sie, ob dies hilfreich ist. In diesem Fall müssen Sie dem Benutzer möglicherweise mitteilen, dass er für eine größere VM bezahlen muss, um die gewünschte Leistung für diese Workload zu erzielen.
Dem Brand entkommen (wenn es nicht dein Problem ist)
Wenn sich der Benutzer aus irgendeinem Grund weigert, dieselbe Softwarekonfiguration auf separater Hardware zu testen, müssen Sie entweder auf die Behebung des Leistungsproblems in der Anwendung zurückgreifen (was unter Linux schwierig bis unmöglich sein kann, wie Brendan Gregg beschreibt) in seinem Vortrag (manchmal müssen Sie möglicherweise nur diese Leistungskosten "tragen") oder einfach darauf bestehen, dass der Benutzer falsch ist. Dies ist ein unglücklicher Nebeneffekt bei der Unterstützung von Entwicklern auf Ihren Systemen.
An diesem Punkt müssen Sie sich möglicherweise fragen, wie Ihre Geschäftsbeziehung zu Ihren Benutzern aussieht (falls vorhanden). Wenn Sie nicht verwaltetes Hosting im privaten Sektor bereitstellen , müssen Sie möglicherweise darauf bestehen, dass Sie nicht für die Sicherstellung der Leistung des Benutzercodes verantwortlich sind.
Wenn Sie Managed Hosting bereitstellen oder anderweitig zugestimmt haben, den Software-Mitarbeitern bei ihren Problemen zu helfen, unabhängig davon, ob das Problem ihre Schuld ist, müssen Sie möglicherweise die Ärmel hochkrempeln, sich die Hände schmutzig machen und ein komplexeres Leistungsprofil erstellen Tools, um festzustellen, ob Sie ein tatsächliches Problem erkennen können. Ist es nur ein wirklich gesprächiges Protokoll, das einen Netzwerk-Socket blockiert? Ist es Speicher I / O-gebunden? Oder ist im BIOS VT-x möglicherweise nicht aktiviert? Es gibt viel zu viele Möglichkeiten, um sie überhaupt aufzulisten.
Um diesen Abschnitt zusammenzufassen: Wenn Sie einen geschäftlichen oder politischen Grund finden, sich dafür zu entschuldigen, dass Sie nicht für die Lösung dieses Problems verantwortlich sind, ist dies möglicherweise der einfachste und effizienteste Ausweg. Leider bedeutet dies auch, dass der Benutzer sein Problem möglicherweise nie behebt und möglicherweise andere Geschäftspartner als Alternative in Betracht zieht.
Fächern Sie die Flammen (wenn es Ihr Problem ist)
Da das allgemeine Thema "Java" zu sein scheint, können Sie zunächst feststellen, ob auf dem Java-Prozess selbst extrem langsamer Code ausgeführt wird. Idealerweise kann Ihnen der Entwickler / Benutzer / Kunde den Quellcode seines Java-Programms (und aller abhängigen Bibliotheken) zur Verfügung stellen.
Versuchen Sie, das Programm unter einem guten Profiler auszuführen . Es gibt freie und nicht freie Profiler; Ein Beispiel für eine kostenlose Version ist die, die mit NetBeans geliefert wird . Es kann eine Herausforderung sein, den Profiler dazu zu bringen, Ihre Anwendung erfolgreich zu starten und zu instrumentieren, je nachdem, was genau diese Anwendung ist, aber die Ergebnisse sind fast immer in irgendeiner Weise aussagekräftig.
Sie können natürlich auf die Verwendung htop
und / oder iotop
Erkennung zurückgreifen, ob die Java-VM (oder das zugehörige RDBMS) eine übermäßige Menge an CPU-, Speicher-E / A- oder Festplatten-E / A-Vorgängen ausführt, die über die von Ihnen in Betracht gezogene Menge hinausgeht. " angemessen "(angesichts der Hardware und der Arbeitsbelastung). Dies sind extrem weitreichende Tools, die nicht immer das vollständige Bild vermitteln, da es manchmal bei Leistungsproblemen darum geht, was das Programm nicht tut, während es auf etwas anderes wartet, das nicht mit einem Ressourcenengpass zusammenhängen kann. Dies ist ungefähr so allgemein wie ein Versuch, Ihr Auto zu starten, um festzustellen, ob der Motor richtig läuft oder nicht. Was machst du, wenn es nicht startet? Das'
Zuletzt werde ich nur wiederholen, was Brendan Gregg in seinem Vortrag gesagt hat, und DTrace erwähnen. Die volle Funktionalität von DTrace wurde unter Linux noch nicht repliziert, weder durch die Neuimplementierung von dtrace-on-Linux noch durch Konkurrenten wie SystemTap. Sie können jedoch versuchen , eines dieser Tools zu verwenden, um festzustellen, ob es hilfreich ist. Einige Einsichten können besser sein als keine .
Natürlich benötigen Sie spezielle Kenntnisse in der Verwendung dieser Werkzeuge vom Typ "Schweizer Taschenmesser". Sie werden den größten Teil dieses Fachwissens durch viel Erfahrung gewinnen (lesen Sie: Versuch und Irrtum und googeln). Es geht nicht nur darum, das Tool zu starten und sich auf das Problem hinweisen zu lassen. Sie müssen das Problem anhand der verfügbaren Daten beheben. Es ist nicht einfach. Leistung ist selten.