Это может показаться связанным с программированием, но это вопрос ОС.
Я пишу небольшой высокопроизводительный демон, который принимает тысячи соединений в секунду. Он отлично работает на Linux (в частности, Ubuntu 9.10 на EC2). В Mac OS X, если я добавлю несколько тысяч соединений (примерно 16350) в тест, который просто открывает соединение, делает свое дело и закрывает соединение, то программа тестов зависает на несколько секунд, ожидая, пока сокет станет доступным перед продолжением (или тайм-аут в процессе).
Я использовал как Apache Bench, так и Siege (чтобы убедиться, что это не тестовое приложение).
Так почему / как Mac OS X ограничивает RATE, при котором можно использовать сокеты, и могу ли я помешать ему это сделать?
Или что-то еще происходит?
Я знаю, что есть предел файлового дескриптора, но я не достигаю этого. Нет ошибки при приеме сокета, он просто на некоторое время зависает после первых (примерно) 16000, ожидая - я полагаю - ОС освободит сокет. Этого не должно происходить, так как все до этого сокеты закрыты в этой точке. Предполагается, что они будут доступны по цене, которую они закрывают, и делают это в Ubuntu, но, похоже, что-то вроде мульти (5-10?) вторая задержка в Mac OS X.
Я пытался настроить с ulimit в любом направлении. Нада.