Экспериментирую с SiteKnockerBot и лимитом соединений

Вчера ещё раз попытался избавить SiteKnockerBot от ложных срабатываний. Думал, что проблема в нехватке пропускной способности канала VDSа, на котором он работает. Посмотрел загрузку канала утилитой nload. Потом интереса ради загрузил iso-образ какого-то дистрибутива и увидел, что бот занимает далеко не весь канал.
Решил попробовать со своего компьютера. Вытащил базу на localhost, запустил, и обнаружил, что и тут то же самое: если поставить большое количество одновременных соединений, то через некоторое время ошибки таймаута начинают идти сплошным потоком.
Сначала попытался поменять настройки Http.Transport — увеличить размер приёмного буфера. Для этого пришлось обновлять версию go, так как по умолчанию у меня стояла 1.10, а менять его можно только с 1.13. Безрезультатно. Но позапускав бота на своём компьютере, обнаружил, что даже после его завершения какое-то время даже броузеры не могут нормально устанавливать соединение. Стало понятно, что всё упирается в какие-то системные ограничения.
В результате полдня экспериментировал с настройками: пытался уменьшить tcp_fin_timeout, увеличить tcp_mem, tcp_rmem, включить tcp_tw_reuse. Но безрезультатно. Максимум, чего удалось добиться — это при увеличении количества потоков вместо таймаута начала возникать ошибка no such host. Ещё думал, что дело в нехватке свободных TCP ports, но их увеличение тоже не помогло.
В общем, после всего этого понизил количество одновременных потоков до 25, и пока так и оставил. Плохо только одно: максимальное количество проверяемых сайтов становится равно всего около 15 тысяч. Может, потом придут ещё какие-нибудь идеи.