基本故障排除
故障排除清单
以下是出现问题时需要检查的事项的简短列表。
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、 C# 、 Java )和核心服务器(即 SERVER)项目都是公开的。