故障排除清单
以下是出现问题时需要检查的事项的简短列表。
- mongoc_init()您是否在 中调用了- main()?否则,您可能会看到段错误。
- 您是否泄漏了可以通过 - mongoc-stat <PID>发现的任何客户端或游标?
- 数据包是否已发送到服务器? 查看来自 - mongoc-stat <PID>的出站字节数。
- ASAN是否显示任何泄漏? 确保在进程结束时调用- mongoc_cleanup()以清除 MongoDB C 驱动程序中的延迟分配。
- 如果要编译您自己的MongoDB C驱动程序副本,请考虑使用 cmake 选项 - -DENABLE_TRACING=ON来启用函数跟踪以及将网络数据包的十六进制转储到- STDERR和- STDOUT。
性能计数器
MongoDB C驱动程序附带一项可选且独特的功能,可帮助开发人员和系统管理员解决生产中的问题。 每个使用C驱动程序的进程都有性能计数器。 如果可用,可以通过共享内存段在应用程序进程之外访问计数器。 这些计数器可通过 Munin 或 Nagios 等工具轻松用于有关应用程序进程的图表统计。 示例,命令watch --interval=0.5 -d mongoc-stat $PID可用于监控应用程序。
性能计数器仅在支持共享内存段的 Linux 平台和 macOS arm 64平台上可用。 在支持的平台上,它们默认启用。 通过指定 cmake 选项-DENABLE_SHM_COUNTERS=OFF ,可以在没有计数器的情况下构建应用程序。 此外,如果性能计数器已编译,则可以通过指定环境变量MONGOC_DISABLE_SHM在运行时禁用它们。
性能计数器追踪以下内容:
- 活动游标和已处理游标 
- 活动和已弃置客户端、客户端池和套接字流。 
- 按类型发送和接收的操作数。 
- 传输和接收的字节数。 
- 身份验证成功和失败。 
- 传输协议错误数。 
注意
当相应消息的一个或多个字节写入流时,操作被视为“已发送”,无论整个消息是否成功写入,也无论操作最终成功还是失败。 这不包括在流连接进程中可能写入的字节,例如 TLS 握手消息。
要访问权限给定进程的计数器,只需向随MongoDB C驱动程序程序安装的mongoc-stat程序提供进程ID 即可。
$ mongoc-stat 22203    Operations : Egress Total        : The number of sent operations.                    : 13247    Operations : Ingress Total       : The number of received operations.                : 13246    Operations : Egress Queries      : The number of sent Query operations.              : 13247    Operations : Ingress Queries     : The number of received Query operations.          : 0    Operations : Egress GetMore      : The number of sent GetMore operations.            : 0    Operations : Ingress GetMore     : The number of received GetMore operations.        : 0    Operations : Egress Insert       : The number of sent Insert operations.             : 0    Operations : Ingress Insert      : The number of received Insert operations.         : 0    Operations : Egress Delete       : The number of sent Delete operations.             : 0    Operations : Ingress Delete      : The number of received Delete operations.         : 0    Operations : Egress Update       : The number of sent Update operations.             : 0    Operations : Ingress Update      : The number of received Update operations.         : 0    Operations : Egress KillCursors  : The number of sent KillCursors operations.        : 0    Operations : Ingress KillCursors : The number of received KillCursors operations.    : 0    Operations : Egress Msg          : The number of sent Msg operations.                : 0    Operations : Ingress Msg         : The number of received Msg operations.            : 0    Operations : Egress Reply        : The number of sent Reply operations.              : 0    Operations : Ingress Reply       : The number of received Reply operations.          : 13246       Cursors : Active              : The number of active cursors.                     : 1       Cursors : Disposed            : The number of disposed cursors.                   : 13246       Clients : Active              : The number of active clients.                     : 1       Clients : Disposed            : The number of disposed clients.                   : 0       Streams : Active              : The number of active streams.                     : 1       Streams : Disposed            : The number of disposed streams.                   : 0       Streams : Egress Bytes        : The number of bytes sent.                         : 794931       Streams : Ingress Bytes       : The number of bytes received.                     : 589694       Streams : N Socket Timeouts   : The number of socket timeouts.                    : 0  Client Pools : Active              : The number of active client pools.                : 1  Client Pools : Disposed            : The number of disposed client pools.              : 0      Protocol : Ingress Errors      : The number of protocol errors on ingress.         : 0          Auth : Failures            : The number of failed authentication requests.     : 0          Auth : Success             : The number of successful authentication requests. : 0 
提交错误报告
您认为您发现了错误?想要查看MongoDB C驱动程序中的新功能?请在我们的问题管理工具 Jira 中打开案例:
JIRA 中针对所有驱动程序项目(即CDRIVER、CSHARP、JAVA)和核心服务器(即SERVER)项目都是公开的。