[CLOSED] //cетевые карты, сокеты и стримы
Еще важно мерять все то же самое с параллельными запросами. Тут обычно async io рулит. Это тебе к netty.
ну и в профайлере в яве такие же значения
очень подозрительно, что с диска в среднем напрямую в браузер тот же файл тоже 250мс грузится.
паралельные пока что побоку, интересует предельная скорость отдачи денных в сетевушку из оперативки.
не измеряй браузером для начала
- От методики измерения сильно зависит
- Если очень хочется заполнить гигабитовый линк, то бери уж Tomcat c APR, выключай буферизацию и используй keep-alive
- А главное зачем?
а чем? //я с вёбом 2ой день пока только работаю
как зачем - чтобы клиентам удобно было. гораздо приятнее когда файлик за 100мс открывается, нежели за 3.5сек.
А вообще, видимо, эти 250мс уходят не туда, куда ты думаешь. Попробуй поиграться с другими размерами файлов.
Ёпт, как так не туда, если время в браузере с этим совпадает?:
System.out.println(socket.toString;
long start = System.currentTimeMillis;
OutputStream out = new BufferedOutputStream(socket.getOutputStream;
out.write(data);
out.flush;
socket.close;
long finish = System.currentTimeMillis;
long dur = finish - start;
System.out.println(" duration " + dur);
при других размерах линейно от объёма время растёт
тайминг собственно пакетов удобно проверяется tcpdump'ом
Я тут случайно обнаружил, что он два гет запроса шлёт на самом деле - html и фавикон, и я на оба отвечаю. Добавил проверку на то, что в гете пришло - фаерфокс стал в два раза быстрее файл забирать, а в хроме всё также осталось. Хрень какая-то.
2) никак не пойму, почему хром дольше файл забирает:
хром:
Socket[addr=/0:0:0:0:0:0:0:1,port=57454,localport=8082]
duration 54
Socket[addr=/0:0:0:0:0:0:0:1,port=57455,localport=8082]
duration 52
Socket[addr=/0:0:0:0:0:0:0:1,port=57456,localport=8082]
duration 46
Socket[addr=/0:0:0:0:0:0:0:1,port=57457,localport=8082]
duration 47
Socket[addr=/0:0:0:0:0:0:0:1,port=57458,localport=8082]
duration 43
фаерфокс:
Socket[addr=/0:0:0:0:0:0:0:1,port=57461,localport=8082]
duration 25
Socket[addr=/0:0:0:0:0:0:0:1,port=57462,localport=8082]
duration 24
Socket[addr=/0:0:0:0:0:0:0:1,port=57463,localport=8082]
duration 20
Socket[addr=/0:0:0:0:0:0:0:1,port=57464,localport=8082]
duration 26
а чем? //я с вёбом 2ой день пока только работаюну если ты написал программу, которая пихает данные в сокет, то можно теперь написать аналогичную, которая их с другой стороны забирает
Если на один Ф5 одна duration, то тогда как у тебя "время в браузере" совпадает с "профайлингом"?
Нет, просто время отдачи меняется в некоей дельте, привёл в качестве примера несколько попыток.
а зачем ты отдаёшь статику томкатом?
Спасибо за совет, написал. Томкат с/без APR отдаёт 5мб за 41-43мс (с ARR вроде на 1мс быстрее, но хз сокетсервер который я написал - за 38-40мс, что близко к расчётной максимальной скорости. Т.е. дело в браузерах. Кстати, быстрее всех страницу (судя по профайлеру) забирает IE, как раз за те же 40-42мс.
Оставить комментарий
kill-still
Если вкратце описывать проблему, то я сейчас исследую предельные возможности оптимизации скорости отдачи страницы.Например, томкат сейчас отдаёт тяжёлую статическую страницу страницу с данными(5мб) скажем за 280мс.
Я написал сокет сервер, который не разбирая гет запрос сразу без разговоров отдаёт страницу в виде byte[] в оутпут стрим сокета. Это происходит за 250мс. Смысловая часть кода:
Внутри там вызывается
У меня два вопроса:
1) можно ли ещё как-то ускорить процесс, или 250мс это предел к которому надо стремиться?
Ведь сетевая карта 1Гб, т.е. 5мб должны отдаваться ~ за 40мс(на самом деле немного дольше, т.к. там вроде ~20% трафика - служебная информация)?
2) где почитать про то, что там внутри происходит на нативном и апаратном уровне, и как оно всё устроено.
Буду благодарен за подсказки, в каком направлении копать дальше.