NetWorker-REST-API: Zeitweise Timeouts bei HTTP GET-Anforderungen
Zusammenfassung: Die Anwendungsprogrammschnittstelle (API) von NetWorker Representational State Transfer (REST) wird verwendet, um Informationen (HTTP GET) von einem NetWorker-Server in der Umgebung anzufordern. Bei den REST API-Abfragen tritt gelegentlich ein Timeout auf und der restapi.log zeigt aufgrund eines Socket-Timeouts eine interne Serverfehlermeldung an. ...
Symptome
YYYY-MM-DD HH:MM:SS INFO [https-jsse-nio-9090-exec-26] c.e.n.w.WebApiResponse - Response status Method: 'GET', URI:'v3/global/backups', Status '200'
YYYY-MM-DD HH:MM:SS INFO [https-jsse-nio-9090-exec-26] c.e.n.w.WebApiResponse - Response status Method: 'GET', URI:'v3/global/backups', Status '500'
...
YYYY-MM-DD HH:MM:SS ERROR [https-jsse-nio-9090-exec-11] c.e.n.w.WebApiExceptionMapper - Status 'Internal Server Error', msg: java.io.IOException: Broken pipe
org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:333) ~[catalina.jar:9.0.10]
Ein curl-Befehl für die NetWorker-Server-REST-API zeigt Folgendes an:
[root@NetworkerServer]# curl -X GET -H "Content-Type: application/json" "https://mynsr.mydomain.com:9090/nwrestapi/v3/global/backups" -u "administrator" -k -1
Enter host password for user 'administrator':
curl: (28) Operation timed out after 300406 milliseconds with 0 out of 0 bytes received
Ursache
Die REST API ruft "v3/global/backups" und "v3/global/jobs" allein ist eine ressourcenintensive Abfrage und kann in größeren Umgebungen zu einem Timeout der Anforderung führen.
Die NetWorker-REST-API-Services werden auf einem Apache Tomcat-Java-Servlet-Container gehostet, der auf einer Java Virtual Machine (JVM) ausgeführt wird. Die REST API verwendet JVM-Speicher, um jede Anforderung zu verarbeiten, und es hat sich gezeigt, dass nicht der gesamte Speicher nach einer ressourcenintensiven Abfrage freigegeben wird. Die Erhöhung der JVM-Speicherauslastung kann schließlich zu einem Timeout bei anderen, weniger ressourcenintensiven REST API-Anforderungen führen.
Lösung
Vermeiden Sie die Verwendung ressourcenintensiver Anfragen zum Abrufen von Informationen vom NetWorker-Server. Beispiel: "v3/global/backups" oder "v3/global/clients/CLIENT_NUMBER/backups" mit einem definierten Zeitbereich anstelle der globalen "v3/global/backups", um alle Backups abzurufen.
Beschränken Sie beispielsweise die Ergebnisse für saveTime zwischen einem beliebigen angegebenen Zeitraum. Beispiel für eine Abfrage von Jobs, die innerhalb der letzten 24 Stunden abgeschlossen wurden:
.. Beispiel für /global/backups:
https://NETWORKER_SERVER_ADDRESS:9090/nwrestapi/v3/global/backups?q=saveTime:["START" TO "END"]
https://nsr.amer.lan:9090/nwrestapi/v3/global/backups?q=saveTime:["2024-07-24T00:00:01" TO "2024-07-24T23:59:59"]
../global/clients/client_resourceId_number/backups
https://NETWORKER_SERVER_ADDRESS:9090/nwrestapi/v3/global/clients/client_resourceID_number/backups?q=saveTime:["START" TO "END"]
https://nsr.amer.lan:9090/nwrestapi/v3/global/clients/87.0.90.20.0.0.0.0.196.80.99.102.192.168.9.150/backups?q=saveTime:["2024-07-24T00:00:01" TO "2024-07-24T23:59:59"]
../global/jobs:
https://NETWORKER_SERVER_ADDRESS:9090/nwrestapi/v3/global/jobs?q=endTime:["START" TO "END"]
https://nsr.amer.lan:9090/nwrestapi/v3/global/jobs?q=endTime:["2024-07-29T00:00:01" TO "2024-07-29T23:59:59"]
Wenn bei weniger ressourcenintensiven REST API-Anforderungen eine Zeitüberschreitung auftritt, können die NetWorker-Serverservices neu gestartet werden, um die vorhandene JVM-Speichernutzung freizugeben.