

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 排查从 Kinesis 代理发送时出现的问题
<a name="agent-faq"></a>

此表提供了使用 Amazon Kinesis 代理时所遇到常见问题的问题排查信息和解决方案。


| 问题 | 解决方案 | 
| --- | --- | 
| 为什么 Kinesis 代理无法在 Windows 上运行？ | [适用于 Windows 的 Kinesis 代理](https://docs.amazonaws.cn/kinesis-agent-windows/latest/userguide/what-is-kinesis-agent-windows.html)与适用于 Linux 平台的 Kinesis 代理是不同的软件。 | 
| 为什么 Kinesis 代理速度变慢且/或 RecordSendErrors 增加？ | 这通常是由于 Kinesis 节流造成的。查看 Kinesis Data Streams 的 `WriteProvisionedThroughputExceeded` 指标或 Firehose 流的 `ThrottledRecords` 指标。这些指标从 0 开始的任何增加都表示需要增加流限制。有关更多信息，请参阅 [Kinesis Data Stream limits](https://docs.amazonaws.cn/streams/latest/dev/service-sizes-and-limits.html) 和 [Firehose streams](https://docs.amazonaws.cn/firehose/latest/dev/limits.html)。<br />排除节流后，查看 Kinesis 代理是否配置为跟踪大量小文件。Kinesis 代理跟踪新文件时会有延迟，因此 Kinesis 代理应跟踪少量大文件。尝试将您的日志文件合并为大文件。 | 
| 如何解决 java.lang.OutOfMemoryError 异常？ | 当 Kinesis 代理没有足够的内存来处理当前的工作负载时会发生此情况。尝试增加 /usr/bin/start-aws-kinesis-agent 中的 JAVA\_START\_HEAP 和 JAVA\_MAX\_HEAP，并重新启动代理。 | 
| 如何解决 IllegalStateException : connection pool shut down 异常？ | Kinesis 代理没有足够的连接来处理当前的工作负载。尝试在 /etc/aws-kinesis/agent.json 的常规代理配置设置中增加 maxConnections 和 maxSendingThreads。这些字段的默认值是可用运行时系统处理器的 12 倍。有关高级代理配置设置的更多信息，请参见 [AgentConfiguration.java](https://github.com/awslabs/amazon-kinesis-agent/blob/master/src/com/amazon/kinesis/streaming/agent/config/AgentConfiguration.java)。 | 
| 如何调试 Kinesis 代理的其他问题？ | 可在 /etc/aws-kinesis/log4j.xml 中启用 DEBUG 级别日志。 | 
| 我应该如何配置 Kinesis 代理？ | maxBufferSizeBytes 越小，Kinesis 代理发送数据的频率就越高。这可能是好事，因为这减少了记录的传输时间，但也增加了每秒对 Kinesis 的请求。 | 
| 为什么 Kinesis 代理会发送重复记录？ | 这是由于文件跟踪中的错误配置造成的。确保每个 fileFlow’s filePattern 只匹配一个文件。如果正在使用的 logrotate 模式处于 copytruncate 模式，也可能发生这种情况。尝试将模式更改为默认模式或创建模式以避免重复。有关处理重复记录的更多信息，请参阅[处理重复记录](https://docs.amazonaws.cn/streams/latest/dev/kinesis-record-processor-duplicates.html)。 | 