Хорошая статья про анализ производительности приложений (на русском их не так много) http://www.pvsm.ru/c-2/265871 #perfomance #troubleshooting
www.pvsm.ru
Практическое руководство по анализу производительности приложений
Вы уже наверняка знаете, что спустя несколько месяцев после конференций мы выкладываем
Шпаргалка по траблшутингу сети https://medium.com/@devopslearning/100-days-of-devops-day-62-useful-linux-command-for-network-troubleshooting-920430a2f75f #network #troubleshooting
Medium
100 Days of DevOps — Day 62-Useful Linux Command for Network Troubleshooting
Welcome to Day 62 of 100 Days of DevOps, Focus for today is useful Linux Command for Network Troubleshooting
Один из методов дебага - триангуляция в SRE практике #sre #debug #troubleshooting https://medium.com/dm03514-tech-blog/sre-debugging-strategies-triangulation-efc5f796205c
Medium
SRE: Debugging: Strategies: Triangulation
Triangulation is a debugging strategy that uses multiple perspectives in order to arrive both a one to many and client-server partition of…
Forwarded from Записки админа
⚙️ Тем временем, там уже 4 части набралось (ссылки в левой части страницы), последняя - Network address translation part 4 – Conntrack troubleshooting.
#напочитать #network #troubleshooting
#напочитать #network #troubleshooting
Forwarded from Записки админа
⚙️ Смотрите какую штуку нашёл - https://sadservers.com/ разные варианты проблем, которые нужно решить на сервере Linux. При этом, серверы для тренировки можно получить прямо тут же, на сайте.
Архитектуру ресурса ребята показали на Github: https://github.com/fduran/sadservers
#linux #линк #troubleshooting
P. S. Стоило мне только написать пост, как серверы перестали создаваться. Судя по всему, несколько часов назад у проекта уже были проблемы с квотами, и похоже что ситуация повторилась.😐
Архитектуру ресурса ребята показали на Github: https://github.com/fduran/sadservers
#linux #линк #troubleshooting
P. S. Стоило мне только написать пост, как серверы перестали создаваться. Судя по всему, несколько часов назад у проекта уже были проблемы с квотами, и похоже что ситуация повторилась.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13
Forwarded from Performance matters!
photo_2025-01-20_08-36-01.jpg
60.5 KB
Ранее я писал о баге Haproxy: после рестарта треды не завершались, что приводило к их накоплению, память иссякала и приходил OOM Killer.
Проблему решали костылем — директива hard-stop-after принудительно завершает треды после рестарта.
Но Haproxy не сдается и наносит ответный удар!
Симптомы схожи: утечка памяти.
Но сбой наступает когда (это гипотеза) заканчивается память для TCP-буферов (
На скрине такой период отмечен красным прямоугольником.
Где
Оказалось, что система насыщается "повисшими" соединениями, чьи буферы сокетов содержат данные:
где:
*
*
А раз есть не прочитанные данные, значит таймер TCP keepalive не взводится:
Был бы повод, а костыль найдется!
Ребята из CloudFlare писали в свое время статью When TCP sockets refuse to die, где в виде решения предлагалось использовать опцию сокета
В свою очередь Haproxy поддерживает ее через tcp-ut.
Посмотрим, как себя покажет.
tags: #tcp #linux #kernel #troubleshooting
Проблему решали костылем — директива hard-stop-after принудительно завершает треды после рестарта.
Но Haproxy не сдается и наносит ответный удар!
Причины еще предстоит выяснить, поэтому это скорее "заметка с полей"
Симптомы схожи: утечка памяти.
Но сбой наступает когда (это гипотеза) заканчивается память для TCP-буферов (
net.ipv4.tcp_mem) - ядро с переменным успехом пытается освободить память для новых / существующих соединений, что приводит к затруднению в сетевых взаимодействиях.На скрине такой период отмечен красным прямоугольником.
# sysctl net.ipv4.tcp_mem
net.ipv4.tcp_mem = 90435 120582 180870
Где
180870 - максимальное значение (в страницах памяти) под все TCP сокеты в системе, что равно ~ 706MB. Оказалось, что система насыщается "повисшими" соединениями, чьи буферы сокетов содержат данные:
# ss -ntOai | awk '{for(i=1;i<=NF;i++)if($i~/^lastsnd:/){split($i,a,":");print a[2], $2, $4, $5}}' | sort -n | tail
#lastsnd # Recv-Q #Src #Dst
234423668 157355 10.11.12.4:57354 10.11.6.123:80
235316436 302417 10.11.12.4:56232 10.11.6.124:80
238200680 301585 10.11.12.4:37940 10.11.6.124:80
238726828 300103 10.11.12.4:58944 10.11.6.124:80
243816724 297015 10.11.12.4:51700 10.11.6.125:80
251456440 302959 10.11.12.4:52324 10.11.6.125:80
252237780 302464 10.11.12.4:47786 10.11.6.123:80
257868244 163453 10.11.12.4:41568 10.11.6.125:80
259905196 300433 10.11.12.4:40202 10.11.6.123:80
261307944 214022 10.11.12.4:54888 10.11.6.123:80 # это ~ 72 часа
где:
*
lastsnd - время с последней отправки данных, в милисекундах;*
Recv-Q - объем не прочитанных данных, в байтах.А раз есть не прочитанные данные, значит таймер TCP keepalive не взводится:
static void tcp_keepalive_timer (struct timer_list *t)
{
...
/* It is alive without keepalive 8) */
if (tp->packets_out || !tcp_write_queue_empty(sk))
goto resched;
...
resched:
inet_csk_reset_keepalive_timer (sk, elapsed);
goto out;
...
out:
bh_unlock_sock(sk);
sock_put(sk);
}
Был бы повод, а костыль найдется!
Ребята из CloudFlare писали в свое время статью When TCP sockets refuse to die, где в виде решения предлагалось использовать опцию сокета
TCP_USER_TIMEOUT:...it specifies the maximum amount of time in milliseconds that transmitted data may remain unacknowledged, or buffered data may remain untransmitted (due to zero window size) before TCP will forcibly close the corresponding connection and return **ETIMEDOUT** to the application...
В свою очередь Haproxy поддерживает ее через tcp-ut.
Посмотрим, как себя покажет.
tags: #tcp #linux #kernel #troubleshooting
👍2