Поправено е:
sudo sysctl net.ipv4.tcp_tw_reuse=1
След това рестартирайте mongo.
Като алтернатива можете да го добавите към /etc/sysctl.conf (така че да се изпълнява при рестартиране):
net.ipv4.tcp_tw_reuse=1
След това стартирайте това за презареждане (без да се налага да рестартирате)
sudo sysctl -p /etc/sysctl.conf
Тази "корекция" ще деактивира състоянието на изчакване за TCP сокети (за целия сървър). Така че наистина изобщо не е поправка. Въпреки това, докато mongo намали тяхното състояние на изчакване чрез SO_LINGER, голям брой сървърни сокети ще се обединят в състояние TIME_WAIT и ще останат неизползваеми за нови връзки. Можете да видите броя на връзките за TIME_WAIT с това:
netstat -an | grep TIME_WAIT | wc -l
С това успях да видя как се проваля при около 28k TIME_WAIT връзки. Използване на този флаг на ядрото:
sysctl net.ipv4.ip_local_port_range="18000 65535"
Сървърът се проваля при 45k връзки. Така че, за да възпроизведете грешката по-лесно, можете да намалите диапазона до 200 или нещо малко.
И така, резултатът от това беше все пак програмен въпрос (както можете да видите от последната връзка):
TCP опция SO_LINGER (нула ) - когато е необходимо
http://alas.matf.bg.ac.rs /manuals/lspe/snode=105.html