NetScaler CPX 故障排除

Last published : Oct 06, 2026
本文档解释了如何排查您在使用 NetScaler CPX 时可能遇到的问题。通过本文档,您可以收集日志以确定原因,并针对与 NetScaler CPX 安装和配置相关的一些常见问题应用变通方法。
  • 为什么 NetScaler CPX 中的内存使用率总是很高?
内存使用率是通过比较 NetScaler CPX 的当前内存使用量与 NetScaler CPX 从操作系统 (OS) 分配给自身的总内存来确定的。NetScaler CPX 首先从操作系统分配最少的必要内存用于启动和基本操作。最初,由于 NetScaler CPX 为其操作分配了最少的必要内存,因此内存消耗百分比很高。最终,随着 NetScaler CPX 操作规模的扩大,对更多资源的需求增加,NetScaler CPX 会从操作系统增量分配额外的内存,内存使用量也随之增加,从而导致内存使用率很高。
因此,由于 NetScaler CPX 的动态内存分配策略,NetScaler CPX 通常显示较高的内存使用率,这反映了它对资源的有效利用,而不是可用内存不足。
  • 如何查看 NetScaler CPX 日志?
    如果 NetScaler CPX 是使用 tty:true 选项部署的,您可以使用 kubectl logs 命令查看 NetScaler CPX 日志。您可以运行以下命令来显示日志:
    kubectl logs <pod-name> [-c <container-name>] [-n <namespace-name>]
    示例,
    kubectl logs cpx-ingress1-69b9b8c648-t8bgn -c cpx -n citrix-adc
    以下是使用 tty:true 选项部署 NetScaler CPX pod 的示例:
      containers:
        - name: cpx-ingress
          image: "quay.io/citrix/citrix-k8s-cpx-ingress:13.0-58.30"
          tty: true
          securityContext:
             privileged: true
          env:
    您可以在 NetScaler CPX 文件系统的 /cpx/log/boot.log 文件中找到更多启动日志。
    注意:要获取 pod 名称,请运行 kubectl get pods -o wide 命令。
  • 如何从 NetScaler CPX 收集技术支持包?
    您可以在 Kubernetes 主节点的 shell 界面上运行以下命令以收集 NetScaler CPX 技术支持包:
    kubectl exec <cpx-pod-name> [-c <cpx-container-name>] [-n <namespace-name>] /var/netscaler/bins/cli_script.sh "show techsupport"
    您可以在 NetScaler CPX 文件系统的 /var/tmp/support 目录中查看技术支持包。使用 scp 或 kubectl cp 将技术支持包从 NetScaler CPX 复制到所需目标。
    示例:
    root@localhost# kubectl exec cpx-ingress1-55b9b6fc75-t5kc6 -c cpx -n citrix-adc /var/netscaler/bins/cli_script.sh "show techsupport"
    exec: show techsupport
      Scope:  NODE
    Done
    root@localhost# kubectl cp cpx-ingress1-55b9b6fc75-t5kc6:var/tmp/support/collector_P_192.168.29.232_31Aug2020_07_30.tar.gz /tmp/collector_P_192.168.29.232_31Aug2020_07_30.tar.gz -c cpx
    root@localhost# ll /tmp/collector_P_192.168.29.232_31Aug2020_07_30.tar.gz
    -rw-r--r-- 1 root root 1648109 Aug 31 13:23 /tmp/collector_P_192.168.29.232_31Aug2020_07_30.tar.gz
  • NetScaler CPX pod 为什么在启动时卡住?
    您可以使用 kubectl describe pods 命令检查 pod 状态。运行以下命令以了解 pod 状态:
    kubectl describe pods <pod-name> [-c <container-name>] [-n <namespace-name>]
    示例:
    kubectl describe pods cpx-ingress1-69b9b8c648-t8bgn
    如果 pod 事件显示容器已启动,则必须检查 pod 日志。
  • 如何在 NetScaler CPX pod 和 Kubernetes 主节点之间复制文件?
    建议使用 Docker 的卷挂载功能将 /cpx 目录挂载到主机的 文件系统。如果 NetScaler CPX 容器退出并生成核心转储,则日志和其他重要数据可在挂载点上获取。
    您可以使用以下任一命令在 NetScaler CPX pod 和 Kubernetes 主节点之间复制文件:
    kubectl cp:您可以运行以下命令将文件从 pod 复制到节点:
    kubectl cp <pod-name>:<absolute-src-path> <dst-path> [-c <container-name>] [-n <namespace-name>]
    示例:
    root@localhost:~# kubectl cp cpx-ingress-596d56bb6-zbx6h:cpx/log/boot.log /tmp/cpx-boot.log -c cpx-ingress
    root@localhost:~# ll /tmp/cpx-boot.log
    -rw-r--r-- 1 root root 7880 Sep 11 00:07 /tmp/cpx-boot.log
    scp:您可以使用此命令在 NetScaler CPX pod 和 Kubernetes 节点之间复制文件。运行以下命令将文件从 pod 复制到节点。当提示输入密码时,提供 SSH 用户的密码:
    scp <user>@<pod-ip>:<absolute-src-path> <dst-path>
    示例:
    root@localhost:~# scp nsroot@192.168.29.198:/cpx/log/boot.log /tmp/cpx-boot.log
    nsroot@192.168.29.198's password:
    boot.log
    100% 7880     5.1MB/s   00:00
    root@localhost:~#
  • 如何在 NetScaler CPX 上捕获数据包?
    要在 NetScaler CPX 上捕获数据包,请使用 kubectl exec 命令启动 NetScaler CPX 的 shell 界面。运行以下命令以启动 NetScaler CPX pod 的 shell 界面:
    kubectl exec -it pod-name [-c container-name] [-n namespace-name] bash
    示例:
    kubectl exec -it cpx-ingress1-69b9b8c648-t8bgn -c cpx -n citrix-adc bash
    然后,运行以下命令开始数据包捕获:
    cli_script.sh “start nstrace -size 0”
    如果您想停止正在进行的包捕获,请运行以下命令:
    cli_script.sh “stop nstrace”
    您可以在 NetScaler CPX 文件系统上的 /cpx/nstrace/time-stamp 目录中查看捕获到 .cap 文件中的数据包。
  • 即使 NetScaler CPX 使用 LS_IP=<ADM-IP> 环境变量部署,为什么许可证服务器仍未配置?
    确保可以从部署 NetScaler CPX 的节点访问许可证服务器。您可以使用 ping <ADM-IP> 命令验证从 NetScaler CPX 节点到 NetScaler Console 的连接。
    如果可以从节点访问 NetScaler Console,则必须在 /cpx/log/boot.log 文件中验证许可证服务器配置日志。您还可以使用 NetScaler CPX pod 的 shell 界面上的以下命令检查许可证服务器配置:
    cli_script.sh "show licenseserver"
    示例:
    root@cpx-ingress-596d56bb6-zbx6h:/cpx/log# cli_script.sh "show licenseserver"
    exec: show licenseserver
    ServerName:  10.106.102.199Port:  27000 Status:  1   Grace:  0  Gptimeleft:  720
    Done
  • 即使在 NetScaler CPX 上成功配置许可证服务器后,为什么 NetScaler CPX 上仍未配置池化许可证?
    在 /cpx/log/boot.log 文件中验证许可证配置日志。您还可以使用 NetScaler CPX pod 的 shell 界面上的以下命令验证 NetScaler CPX 上配置的池化许可证:
    cli_script.sh “show capacity”
    示例,
    root@cpx-ingress-596d56bb6-zbx6h:/cpx/log# cli_script.sh "show capacity"
    exec: show capacity
    Actualbandwidth:  1000  MaxVcpuCount:  2  Edition:  Platinum      Unit:  Mbps   Bandwidth:  0`  `Maxbandwidth:  40000        Minbandwidth:  20       Instancecount:  1
    Done
    此外,请确保所需的许可证文件已上传到许可证服务器。在 NetScaler CPX 上成功配置许可证服务器后,您还可以使用以下命令验证许可证服务器上可用的许可证。在 NetScaler CPX pod 的 shell 界面上运行该命令:
    cli_script.sh “sh licenseserverpool”
    示例:
    root@cpx-ingress-596d56bb6-zbx6h:/cpx/log# cli_script.sh "show licenseserverpool"
    exec: show licenseserverpool
        Instance Total                     : 5
        Instance Available                 : 4
        Standard Bandwidth Total           : 0 Mbps
        Standard Bandwidth Availabe        : 0 Mbps
        Enterprise Bandwidth Total         : 0 Mbps
        Enterprise Bandwidth Available     : 0 Mbps
        Platinum Bandwidth Total           : 10.00 Gbps
        Platinum Bandwidth Available       : 9.99 Gbps
        CP1000 Instance Total              : 100
        CP1000 Instance Available          : 100
      Done
  • 为什么 NITRO API 调用会从 NetScaler CPX 收到 Connection Refused 响应?
    从 NetScaler CPX 12.1 版本开始,NITRO API 的默认端口是 9080(不安全)和 9443(安全)。确保您尝试访问的 NetScaler CPX 的 NITRO 端口在 pod 上已公开。您可以运行 kubectl describe 命令在 NetScaler CPX 容器部分查看 NetScaler CPX 容器的公开和映射端口:
    kubectl describe pods &lt;pod-name> | grep -i port
    示例:
    ng472 | grep -i port
       Ports:          80/TCP, 443/TCP, 9080/TCP, 9443/TCP
       Host Ports:     0/TCP, 0/TCP, 0/TCP, 0/TCP
         NS_HTTP_PORT:            9080
         NS_HTTPS_PORT:           9443
       Port:          <none>
       Host Port:     <none>
         NS_PORT:                 80
  • 即使没有或只有少量流量,为什么 NetScaler CPX 中的 NSPPE 进程仍会占用大部分 CPU 使用率?
    如果 NetScaler CPX 使用 CPX_CONFIG=’{“YIELD”:”NO”}' 环境变量部署,即使没有或只有少量流量,NSPPE 进程也会占用 100% 的 CPU 使用率。如果您不希望 NSPPE 进程占用 CPU 使用率,则必须在不使用 CPX_CONFIG=’{“YIELD”:”NO”} 环境变量的情况下部署 NetScaler CPX。默认情况下,CPX 中的 NSPPE 进程配置为不占用或消耗 CPU 使用率。
  • 为什么 NetScaler CPX 即使已使用注册到 NetScaler Console 所需的环境变量进行部署,也未在 NetScaler Console 中列出?
    您可以在 NetScaler CPX 文件系统上的 /cpx/log/boot.log 文件中找到 NetScaler CPX 注册到 NetScaler Console 的日志。
    您可以使用 ping 命令从 NetScaler CPX pod 验证 NetScaler Console IP 地址的可访问性。此外,请确保为 NetScaler CPX 容器配置了所有必需的 NetScaler Console 注册环境变量。
    • NS_MGMT_SERVER:指定 ADM IP 地址或 FQDN。
    • HOST:指定节点 IP 地址。
    • NS_HTTP_PORT:指定节点上映射的 HTTP 端口。
    • NS_HTTPS_PORT:指定节点上映射的 HTTPS 端口。
    • NS_SSH_PORT:指定节点上映射的 SSH 端口。
    • NS_SNMP_PORT:指定节点上映射的 SNMP 端口。
    • NS_ROUTABLE:NetScaler CPX pod IP 地址无法从外部路由。
    • NS_MGMT_USER:指定 ADM 用户名。
    • NS_MGMT_PASS:指定 ADM 密码。
  • 更改 nsroot 用户的密码后,为什么 cli_script.sh 会显示 Invalid user name or password 错误消息?
    命令 cli_script.sh 是 NetScaler CPX 上 NSCLI 的包装实用程序。它将第一个参数作为命令字符串或文件路径运行,第二个参数是可选的凭据。如果 nsroot 用户的密码已更改,则需要将凭据作为第二个参数提供给 cli_script.sh。您可以运行以下命令以使用凭据运行 NSCLI:
    cli_script.sh “&lt;command>” “:&lt;username>:&lt;password>”
    示例:
     root@087a1e34642d:/# cli_script.sh "show ns ip"
     exec: show ns ip

     ERROR: Invalid username or password

     root@087a1e34642d:/# cli_script.sh "show ns ip" ":nsroot:nsroot123"

     exec: show ns ip

     Ipaddress        Traffic Domain         Type             Mode     Arp     Icmp     Vserver  State
     --------------   ----                   ----             ---     ----     -------  ------   -----
     172.17.0.3       0                   NetScaler IP     Active   Enabled  Enabled  NA       Enabled
     192.0.0.1        0                   SNIP             Active   Enabled  Enabled  NA       Enabled
     Done
  • 为什么使用 root 和 nsroot 用户 SSH 到 NetScaler CPX 会失败?
    从 13.0-64.35 版本开始,NetScaler CPX 会为 SSH 用户(root 和 nsroot)生成并更新默认密码。如果您尚未手动更改密码,则可以在 NetScaler CPX 文件系统上的 /var/deviceinfo/random_id 中找到 SSH 用户的密码。