NetWorker REST API:HTTP GET 请求间歇性超时

摘要: NetWorker 表述性状态传输 (REST) 应用程序编程接口 (API) 用于从环境中的 NetWorker 服务器请求信息 (HTTP GET)。REST API 查询间歇性超时,并且由于套接字超时,restapi.log显示内部服务器错误消息。

本文适用于 本文不适用于 本文并非针对某种特定的产品。 本文并非包含所有产品版本。

症状

NetWorker REST API 用于请求信息 (HTTP GET) 从环境中的 NetWorker 服务器。REST API 查询间歇性超时,并且 restapi.log 显示由于套接字超时导致的内部服务器错误消息。

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]

A curl NetWorker Server REST API 的命令显示:

[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

原因

REST API 调用”v3/global/backups," "v3/global/jobs“或”v3/global/volumes“本身是资源密集型查询,在较大环境中可能会导致请求超时。
 
提醒:此问题不限于列出的 REST API 端点。它可能发生在任何大型全局端点上,观察结果可能因服务器而异。

NetWorker REST API 服务托管在 Java 虚拟机 (JVM) 上运行的 Apache Tomcat Java servlet 容器上。REST API 使用 JVM 内存来处理每个请求,并且可以看到,在资源密集型查询后,并非所有内存都会被释放。JVM 内存利用率的提高最终可能导致其他资源密集程度较低的 REST API 请求超时。

解决方案

避免使用资源密集型请求从 NetWorker 服务器检索信息。例如,”v3/global/backups“或”v3/global/clients/CLIENT_NUMBER/backups可以使用具有定义时间范围的“,而不是使用全局”v3/global/backups“以检索所有备份。

例如,将结果限制为 saveTime 在任何指定的时间范围之间。过去 24 小时内完成的作业查询示例:

../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"]
 
提醒:相应地修改 START 和 END 时间中的 YYYY-MM-DDTHH:mm:SS。这些示例仅用于演示目的。可能需要额外的 REST API 查询规范或过滤器函数才能返回所需的数据。REST API 文档中提供了更多信息和示例:https://developer.dell.com/apis/2378/versions/v3/docs/GettingStarted.md
 

../global/volumes 示例:

https://NETWORKER_SERVER_ADDRESS:9090/nwrestapi/v3/global/volumes?q=type:"MEDIA_TYPE"&fl=location,name,mode,pool,written
https://nsr.amer.lan:9090/nwrestapi/v3/global/volumes?q=type:"Data Domain"&fl=location,name,mode,pool,written

其他信息

请参阅 《REST API 开发人员指南 》中有关 NetWorker API 调用的“查询列表筛选器”(q) 和 “字段列表筛选器” (fl) 设置。

REST API 调试在以下位置进行定义:NetWorker:如何启用 REST API 调试

或者,可以使用以下测试:

在 REST API 命令中使用以下选项:

选项 目的
--max-time 3600 为整个传输(DNS、连接、TLS、请求和响应正文)设置 3600 秒(1 小时)的硬上限 - 如果整个操作未在 1 小时内完成, curl 停止并显示超时错误。
--connect-timeout 60 将建立 TCP/TLS 连接所允许的时间限制为 60 秒。如果 curl 无法在 60 秒内连接,则表示该尝试失败。使用 --retry 启用后,它随后可以重试(取决于以下重试规则)。您可以自行决定更改此值。 
--retry 3 指示 curl 要在出现临时故障时重试最多三次 — 可自行决定更改此值。
典型的重试触发器:
  • 网络级问题(例如:连接超时、DNS 问题、TLS 握手失败)
  • HTTP 5xx 服务器错误 (例如: 500502503504)
--retry-delay 5 设置重试尝试之间固定的 5 秒等待时间 — 在发生暂时性故障后, curl 等待 5 秒钟,然后再进行下一次尝试。您可以自行决定更改此值。 
-H "X-NW-AUTHC-BASE-URL:REMOTE_AUTHC_SERVER_ADDRESS:9090" (可选。)仅当用于处理登录请求的 NetWorker 主机独立于 REST API 端点中的 NetWorker 服务器时,才需要这样做。请参阅:
NetWorker REST API:处理 RESTAPI 请求时如何使用远程 AUTHC 服务器

Windows Powershell:

curl.exe -k -v --compressed `
  --max-time 3600 `
  --connect-timeout 60 `
  --retry 3 `
  --retry-delay 5 `
  -u NETWORKER_USERNAME:'PASSWORD' `
  -H "Accept: application/json" `
  "https://NETWORKER_SERVER_ADDRESS:9090/nwrestapi/v3/global/volumes/ENDPOINT" `
| ConvertFrom-Json `
| ConvertTo-Json -Depth 20 `
| Out-File -Encoding UTF8 OUTPUT_FILE_NAME

 

提醒: -Depth 20 是 PowerShell 的 ConvertTo-Json cmdlet。它控制当 PowerShell 将数据序列化为 JSON 时包含的嵌套对象和数组的级别。嵌套对象的数量(如果有的话)可能会有所不同,具体取决于所使用的 REST API 端点和任何潜在的“查询列表筛选器”(q) 或 “字段列表筛选器” (fl) 参数。对于 NetWorker REST API 调用,20 应该绰绰有余。

 

示例:
curl 命令示例

上面的示例创建了 volumes.json 目录中的文件,其中 curl.exe 运行。该文件的内容包括 REST API 有效负载:
REST API 输出

Linux:

curl -k -v --compressed \
  --max-time 3600 \
  --connect-timeout 60 \
  --retry 3 \
  --retry-all-errors \
  --retry-delay 5 \
  -u NETWORKER_USERNAME:'PASSWORD' \
  -H "Accept: application/json" \
  "https://NETWORKER_SERVER_ADDRESS:9090/nwrestapi/v3/global/volumes/ENDPOINT" \
  -o volumes.json

示例(不带 -v 简洁起见):

[root@nsr ~]# curl -k --compressed \
  --max-time 3600 \
  --connect-timeout 60 \
  --retry 3 \
  --retry-all-errors \
  --retry-delay 5 \
  -u Administrator:'!Password1' \
  -H "Accept: application/json" \
  "https://nsr.amer.lan:9090/nwrestapi/v3/global/volumes?q=type%3A%22Data%20Domain%22&fl=location,name,mode,pool,written" \
  -o volumes.json
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   908    0   908    0     0  22700      0 --:--:-- --:--:-- --:--:-- 22146

在此示例中,文件”volumes.json“是在运行命令的同一目录中创建的。可以使用不同的工具来正确解析 json 格式,使用的工具可能因安装的操作系统和软件而异。

[root@nsr ~]# cat volumes.json | python -m json.tool
{
    "count": 6,
    "volumes": [
        {
            "location": "ddve01.amer.lan",
            "mode": "Appendable",
            "name": "nsr.amer.lan.dddefault.001",
            "pool": "Data Domain Default",
            "written": {
                "unit": "KB",
                "value": 429
            }
        },
        {
            "location": "ddve01.amer.lan",
            "mode": "Appendable",
            "name": "nsr.amer.lan.dddefault.002",
            "pool": "Data Domain Default",
            "written": {
                "unit": "KB",
                "value": 25917027
            }
        },
        {
            "location": "ddve01.amer.lan",
            "mode": "Appendable",
            "name": "VMBackupPool.001",
            "pool": "VMBackupPool",
            "written": {
                "unit": "KB",
                "value": 209818962
            }
        },
        {
            "location": "ddve01.amer.lan",
            "mode": "Appendable",
            "name": "VMBackupPool.002",
            "pool": "VMBackupPool",
            "written": {
                "unit": "KB",
                "value": 2308309500
            }
        },
        {
            "location": "ddve02.amer.lan",
            "mode": "Appendable",
            "name": "nsr.amer.lan_c.dddefault.001",
            "pool": "Data Domain Default Clone",
            "written": {
                "unit": "KB",
                "value": 36752
            }
        },
        {
            "location": "ddve02.amer.lan",
            "mode": "Appendable",
            "name": "VMClonePool.001",
            "pool": "VMClonePool",
            "written": {
                "unit": "KB",
                "value": 0
            }
        }
    ]
}

产品

NetWorker
文章属性
文章编号: 000172472
文章类型: Solution
上次修改时间: 30 4月 2026
版本:  12
从其他戴尔用户那里查找问题的答案
支持服务
检查您的设备是否在支持服务涵盖的范围内。