mongo连接过高完整分析

  1. tornado的autoreload模块, 在unix平台使用的是execv函数直接替换到当前的进程
  2. execv使用新的进程替换当前进程默认会保留全部的file descriptor(mongo连接); 同时执行新的进程的时候又会创建新的mongo连接, 导致不停的reload, 连接数不停的增长

解决方案:
方案一:autoreload模块有一个add_reload_hook添加, 可以添加hook函数, 在执行execv之前会先执行hook函数, 这时候释放mongo连接就可以了
方案二: 可以给file descriptor添加一个FD_CLOEXEC属性, 那么执行execv的时候系统会自动关系这个fd - 这个要看pymongo有没有提供支持了。。。