<ph type="x-smartling-placeholder"></ph>
您正在查看 Apigee Edge 文档。
转到
Apigee X 文档。 信息
本主题讨论网络工具、JVM 工具和诊断日志,可用于 排查 Apigee Edge 上与网络和 JVM 相关的问题。
TCP/IP 数据包嗅探器 (tcpdump) 实用程序
tcpdump 工具是一种命令行数据包嗅探器工具,通过它 捕获或过滤通过网络接收或传输的 TCP/IP 数据包。可以使用 在基于 Linux/Unix 的操作系统上运行。您可以使用 yum 安装此实用程序,如下所示: 如下:
yum install tcpdump
tcpdump 工具有助于排查网络或 SSL 相关问题。例如:
- 502 Bad Gateway 错误(由 EOF 异常导致)
- 503 服务不可用错误
- SSL 握手失败
要排查上述任一问题,您必须先确定设备之间的 发生了错误。对于 Edge,可以是以下键值对之一:
- 客户端应用和路由器
- 路由器和消息处理器
- 消息处理器和后端服务器
找出有问题的组件对后,您就可以捕获 对其中一个或两个组件使用 tcpdump。
使用 tcpdump 捕获发送到特定主机/从特定主机接收的数据包
使用以下 tcpdump 命令捕获发送到或接收自 并将信息保存在指定文件中:
tcpdump -i any -s 0 host <IP address> -w <File name>
其中:
参数 | 说明 |
-i | (接口)指定应从哪个接口捕获数据包。使用 值“any”允许从所有接口捕获数据包 |
-s | (snarf/snaplen) 指定要捕获的每个数据包的数量。使用值 0 (零)可让您捕获整个数据包。 |
IP 地址 | 是我们要捕获其数据包的主机的 IP 地址 |
文件名 | 是 tcpdump 必须写入的文件的名称 |
示例
假设您想要捕获消息处理器和后端之间的数据包 服务器:
- 登录消息处理器。
- 确定后端服务器的 IP 地址(假设 IP 地址为 22.22.22.22) 来捕获数据包
使用以下命令捕获具有特定 IP 的主机的网络数据包 地址:
tcpdump -i any -s 0 host 22.22.22.22 -w rmp-123.pcap
如果后端服务器解析为多个 IP 地址,则使用后端的主机名 位于 tcpdump 命令中,如下所示:
tcpdump -i any -s 0 host <Hostname> -w rmp-123.pcap
如果存在多个具有不同 IP 地址(22.22.22.22、33.33.33.33)的后端服务器 和 44.44.44.44),然后使用以下 tcpdump 命令:
tcpdump -i any -s 0 host 22.22.22.22 or host 33.33.33.33 or host 44.44.44.44 -w rmp-123.pcap
分析 tcpdump
您可以使用 tcpdump 命令或基于 GUI 的工具 Wireshark 查看或分析 tcpdump。
参考
- <ph type="x-smartling-placeholder"></ph> tcpdump 手册页面
- <ph type="x-smartling-placeholder"></ph> TCPdump 命令 - 网络嗅探器工具
- Wireshark
堆转储
堆转储是 Java 进程的内存快照。它们包含 显示堆转储时有关堆中 Java 对象和类的信息。 。这些文件通常非常大(从几 100 MB 到少数)不等 GB。
当消息处理器等 Java 进程显示以下内容时,堆转储非常有用:
- 内存用量高
- OutofMemoryError
为 Java 进程生成堆转储
Java 提供了一个名为 jmap 的实用程序,允许您生成内存 统计信息或堆转储。
使用以下 jmap 命令生成 Java 进程的堆转储:
sudo -u apigee <JAVA_HOME>/bin/jmap -dump:live,format=b,file=<filename> <pid>
其中:
参数 | 说明 |
JAVA_HOME | 是 Java 的安装目录 |
filename | 是将写入堆转储的文件名 |
pid | 是必须捕获其头转储的 Java 应用的进程 ID |
示例
假设消息处理器 mp-east 的内存使用量较高或 OutOfMemory 错误。使用 上的 ps 命令确定消息处理器的进程 ID Unix 操作系统。假设该地址为 24569。
按如下方式运行 jmap 实用程序以生成堆转储:
sudo -u apigee <JAVA_HOME>/bin/jmap -dump:live,format=b,file=mp-east-heapdump.bin 24569
分析堆转储
可以使用 Eclipse MAT(内存分析器工具)分析堆转储,以确定 或哪些 Java 对象会导致内存使用量较高。
参考
<ph type="x-smartling-placeholder"></ph> 如何收集堆转储
<ph type="x-smartling-placeholder"></ph> jmap 实用程序
<ph type="x-smartling-placeholder"></ph> jmap 手册页面
<ph type="x-smartling-placeholder"></ph> 内存分析器工具 (MAT)
线程转储
线程转储是正在运行的 Java 进程中所有线程的状态快照。通过 每个线程的状态以其堆栈的内容呈现,称为堆栈轨迹。 一些线程将成为正在运行的 Java 应用的一部分,而其他线程则是 JVM 内部线程。
线程转储会显示应用的每个线程 activity 的相关信息。 这些信息对于:
- 诊断 CPU 高峰、响应速度慢或 Java 无响应等问题 应用
- 优化应用和 JVM 性能
生成线程转储
您可以使用 jstack 实用程序生成 Java 进程的线程转储,如下所示 如下:
sudo -u apigee <JAVA_HOME>/bin/jstack -l <pid> > <filename>
其中:
参数 | 说明 |
JAVA_HOME | 是 Java 的安装目录。 |
pid | 是您想要捕获其线程转储的 Java 应用的进程 ID。 |
filename | 是将写入线程转储的文件名。 |
示例
在消息处理器上为进程 ID 37320 生成线程转储 mp-east,请使用以下命令:
sudo -u apigee <JAVA_HOME>/bin/jstack -l 37320 > /opt/apigee/edge-message-processor/mp-east-threadDump.txt
如上例所示,进程的线程转储将保存到 /opt/apigee/edge-message-processor/mp-east-threadDump.txt 文件。
分析线程转储
您可以在任何文本编辑器(如 vi (Linux)、记事本 (Windows))中查看线程转储。 请参阅 线程转储,详细了解线程转储的不同部分以及如何解读 信息。
参考
- <ph type="x-smartling-placeholder"></ph> jstack 实用程序
- <ph type="x-smartling-placeholder"></ph> 分析线程转储:CPU 高使用率问题
- <ph type="x-smartling-placeholder"></ph> 如何分析 Java 线程转储