-
Notifications
You must be signed in to change notification settings - Fork 48
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Солнышко Ксения, ИТМО ФИТиП, M3332, stage 1 #11
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
first review
После дедлайна назначу финального ревьюера
src/main/java/ru/vk/itmo/test/solnyshkoksenia/MyHttpServer.java
Outdated
Show resolved
Hide resolved
src/main/java/ru/vk/itmo/test/solnyshkoksenia/MyHttpServer.java
Outdated
Show resolved
Hide resolved
src/main/java/ru/vk/itmo/test/solnyshkoksenia/MyHttpServer.java
Outdated
Show resolved
Hide resolved
src/main/java/ru/vk/itmo/test/solnyshkoksenia/MyHttpServer.java
Outdated
Show resolved
Hide resolved
src/main/java/ru/vk/itmo/test/solnyshkoksenia/MyHttpServer.java
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The PR diff size of 5017 lines exceeds the maximum allowed for the inline comments feature.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The PR diff size of 5017 lines exceeds the maximum allowed for the inline comments feature.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Сниму 1 балл за комментарий к коду. 14 баллов.
Понравился детальный поиск точки разладки с нагрузочным тестированием.
Хотелось бы пообсуждать профилирование. Будет круто соптимизировать dao, например, за счет аллокаций в flush.
@Override | ||
public synchronized void stop() { | ||
try { | ||
dao.close(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Так как после закрытия dao сервер еще работает, селекторы все еще могут вызывать методы dao. В таких случаях будет UB, так как наше dao не рассчитано на работу после close.
|
||
### Профилирование под нагрузкой `PUT` запросами | ||
|
||
Рассмотрим [flame graph для CPU](flame_graphs/put_cpu.html). Здесь у нас много CPU используется для обработки |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
В профиле довольно много времени занимает gc. Есть идеи, почему так?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
много аллоцируем объектов?
Рассмотрим [flame graph для CPU](flame_graphs/put_cpu.html). Здесь у нас много CPU используется для обработки | ||
`PUT`-запроса: примерно поровну между методами `dao.upsert()` и `sendResponse()`. | ||
|
||
Рассмотрим [flame graph для аллокаций](flame_graphs/put_alloc.html). Тут у нас нет такого большого и ярко-выраженного |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Есть идеи по оптимизации числа аллокаций?
Например, 10% аллокаций приходятся на flush, что довольно много, ведь flush происходит редко, значит там единовременно большое число аллокаций. Можно ли от них избавиться?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
да, большое число аллокаций во flush связано с тем, что когда я сохраняю flushingStorage
на диск, я подсчёт размера каждой Entry
вынесла в отдельный метод в StorageUtils
countEntrySize()
, который возвращает пару из двух счётчиков размера. именно на аллокацию этой пары уходит много ресурсов. я заинлайнила этот метод в DistStorage.save()
и количество аллокаций на flush()
стало 4%
import java.lang.foreign.ValueLayout; | ||
import java.nio.charset.StandardCharsets; | ||
|
||
public class MyHttpServer extends HttpServer { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Еще надо добавить обработку исключений на случай непредвиденных серверных ошибок, чтобы это были 5хх
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The PR diff size of 5017 lines exceeds the maximum allowed for the inline comments feature.
* Add dao * Add server * Fix failed tests * Fix failed codeclimate * Fix failed codeclimate * Remove string template * Resolve some problems * Add scripts, report and attachments --------- Co-authored-by: Alexey Shik <[email protected]>
* Add dao * Add server * Fix failed tests * Fix failed codeclimate * Fix failed codeclimate * Remove string template * Resolve some problems * Add scripts, report and attachments --------- Co-authored-by: Alexey Shik <[email protected]>
No description provided.