mongodb 压力测试问题

来源:互联网 发布:图像算法专业 编辑:程序博客网 时间:2024/04/28 20:27

  昨晚在做压力测试的时候, 同步查询经过了4亿次的调用没有发现问题.. 平均每秒5000次查询请求.

  但是在异步查询时, 发现了一个奇怪的现象, 数据库链接buf很快就处于阻塞状态... 导致请求都堆积在缓冲里... 很快数据库就会抛出一个断言错误... : [conn25] Assertion: 10334:Invalid BSONObj size: 0 (0x00000000) first element: est.user: ?type=116

0x55ece9 0x4ede7e 0x5396d8 0x75ca6b 0x75218b 0x757938 0x8a3b3e 0x8b6a40 0x7fd6110e09ca 0x7fd61068f70d

 ./mongod(_ZN5mongo11msgassertedEiPKc+0x129) [0x55ece9]

 ./mongod(_ZNK5mongo7BSONObj14_assertInvalidEv+0x46e) [0x4ede7e]

 ./mongod(_ZN5mongo9DbMessage9nextJsObjEv+0x148) [0x5396d8]

 ./mongod(_ZN5mongo12QueryMessageC1ERNS_9DbMessageE+0xbb) [0x75ca6b]

 ./mongod() [0x75218b]

 ./mongod(_ZN5mongo16assembleResponseERNS_7MessageERNS_10DbResponseERKNS_8SockAddrE+0x5b8) [0x757938]

 ./mongod(_ZN5mongo10connThreadEPNS_13MessagingPortE+0x21e) [0x8a3b3e]

 ./mongod(thread_proxy+0x80) [0x8b6a40]

 /lib/libpthread.so.0(+0x69ca) [0x7fd6110e09ca]

 /lib/libc.so.6(clone+0x6d) [0x7fd61068f70d]

Sat Apr  9 14:02:00 [conn25] AssertionException in connThread, closing client connection

Sat Apr  9 14:02:00 [conn25]  Invalid BSONObj size: 0 (0x00000000) first element: est.user: ?type=116

Sat Apr  9 14:02:01 [conn24] end connection 127.0.0.1:49719

 

  看错误报告, 似乎是某个请求的bson对象长度为0, 于是我在发送请求前也断言查看, 是否有bson对象为NULL就被发送出去... 不过遗憾的是, 并没有收获... , 不过至少有一个问题可以说明, 当连接上请求数量不多时是没问题的... 所以, 打算增加几条链接用于异步查询使用 :)

 

  补: 经查证, 服务器引擎发生波动的原因是因为每条连接采用公用buff提取数据,每次循环读取完整个buff,  这样就带来了一个问题, socket buff内存放的协议数量并非一致, buff内可容纳用户协议数量通常要比数据库协议多得多, 这就导致了发送数据库请求和响应数据库的能力不平衡, 响应能力远小于发送能力, 服务器会在一段时间之后负载过高... 以至于对buff的控制能力下降, 最终无法控制... 只能切断连接...

 

  这并不是我想看到的, 所以, 打算接下来增加网络层对处理协议数量方面的负载控制 :)

原创粉丝点击