2017-02-17 31 views
0

Wir haben eine Reihe von Hilfsprogrammen, die eine .xlsx-Datei für einige Eingabedaten lesen und Berichte generieren, Apache POI wird für diesen Zweck verwendet. Excel-Datei hat 8 Blätter mit einem Durchschnitt von 50 Reihen und 20 Spalten von Daten. Alles funktionierte gut in normalen Windows 7-Box (Entwickler-Maschine lesen). Das Lesen der Datei wird in wenigen Sekunden abgeschlossen sein.Apache POI in Windows Server 2012 R2

Kürzlich haben wir diese Jobs in eine Windows Server 2012 R2-Box verschoben und wir haben festgestellt, dass das letzte Blatt in der Excel-Datei viel Zeit braucht, um das Lesen zu beenden. Ich habe das letzte Blatt dupliziert, um zu bestätigen, dass dies nicht das Datenproblem ist und den Job ausgeführt, das vorletzte Blatt (war das letzte in der vorherigen Ausführung) wurde in Millisekunden gelesen und das letzte (dupliziertes Blatt) wurde wieder gelesen 15 Minuten stecken bleiben. Ich vermute, dass dies daran liegt, dass die Zeit, die zum Schließen der Datei benötigt wird, zu hoch wird, aber das ist nur eine Vermutung und kein konkreter Beweis dafür, auch wenn dies der Fall ist, bin ich mir nicht sicher warum. Einziger Unterschied zwischen funktionierenden Windows-Boxen und nicht funktionierenden Boxen ist das Betriebssystem, Ruhe alle Konfigurationen sind ähnlich. Ich habe den Heap- und Thread-Dump analysiert und keine Probleme gefunden.

Gibt es bekannte Kompatibilitätsprobleme mit POI- und Windows-Serverboxen? Oder ist es etwas mit Code zu tun? Wir verwenden die POI-XSSF-Implementierung.

+1

'Apache POI' ist' Java' Software. Es läuft also nicht direkt in einer "Windows Box", sondern innerhalb einer Java Virtual Machine in einer Java Runtime Environment. Also würde ich die Java JRE-Versionen zwischen den Windows-Systemen vergleichen und einen Blick auf die Erfüllung der [Systemvoraussetzungen für Java] werfen (https://www.java.com/de/download/help/sysreq.xml). –

+0

Ich habe den Vergleich gemacht und die VMs sind gleich, beide laufen auf Java 1.8. Es gibt kein Problem beim Ausführen einer Java-VM, da ich in meinem Problem erwähnt habe, dass die Excel-Datei beim letzten Blatt immer hängen bleibt – Rajeev

+1

Dann würde ich als nächstes das kleinste mögliche Beispiel erstellen, das nur ein '* .xlsx' enthält mehrere Blätter genauso wie Sie dies in Ihrem aktuellen Programm tun. Nur ohne das ganze Zeug um diese einfache Aufgabe herum. Dann würde ich das in beiden Systemen testen. Wenn sich die Leistung selbst in der kleinsten Formung unterscheidet, können Sie den Code hier posten und fragen, warum er sich unterscheidet. Ansonsten füge weitere Sachen hinzu, die du in deinem aktuellen Programm machst und teste es erneut. Tun Sie dies, bis der Leistungsunterschied auftritt. Meist weißt du dann was der Grund ist. Wenn nicht, können Sie den Code veröffentlichen –

Antwort

0

Ok, endlich haben wir das Problem; Das Problem ist mit der VM selbst identifiziert, der Disk I/O Betrieb ist immer 100% und das Lesen/Schreiben der Datei dauerte sehr lange, was dazu führte, dass das Programm dort stecken blieb. Allerdings konnten wir nicht herausfinden, warum die Festplatten-I/O hoch ist, einige Blogs ausprobiert, aber nicht funktioniert, daher haben wir das Betriebssystem auf Windows 2008 Server heruntergestuft und es hat gut funktioniert.

Beachten Sie, dass es nichts mit POI oder irgendetwas zu tun hat, es war sicherlich ein VM/OS-Problem.

Verwandte Themen