@metrics_ru

Страница 121 из 681
Pavel
10.03.2017
17:09:19
дада

Vladimir
10.03.2017
17:09:22
Я и хочу по сути флеймграфы от времени с наложением друг на друга

Google
Vladimir
10.03.2017
17:09:48
Чтобы видеть разницу

И возможностью листать время

Alex
10.03.2017
20:00:54
Конечно
тебя похоже от метрик дико вставляет, раз 3 день обсуждаете их под графану

Vladimir
10.03.2017
20:38:59
Просто мы сектанты

ptchol
11.03.2017
04:37:45
Мы же последователи церкви

мы ещё и с вами можем поговорить

Смею напомнить, что сама тема "церкви", это не просто выдумка Алексея, а корни её уходят далеко, в 2011й год. Когда некогда популярный проект Etsy показал нам этот путь.

https://codeascraft.com/2011/02/15/measure-anything-measure-everything/

По крайней мере я надеюсь что это была отсылка к этому :)

Алексей
11.03.2017
05:18:22
нее. подслушано у @demeliorator

Andrey
11.03.2017
05:41:29
думаю он читал ту статью

Evgeny
11.03.2017
08:53:53
Используем GO стек для графита carbonapi + go-carbon, возникла проблема что carbonapi никак не лимитируется по памяти, когда идет запрос на кучу метрик carbonapi это кэширует и так до тех пор пока не закончиться оперативка (64 ГБ) и он не упадет. есть параметр memsize , пробововал ему выставить 10 и 100 - разницы в поведении не заметил. Кто нибудь сталкивался ?

Google
Vladimir
11.03.2017
10:36:32
вообще должен лимитироваться параметром -memsize

https://github.com/dgryski/carbonapi/blob/master/main.go#L616

либо можно в memcache кэшировать, но это не очень тестировалось

Evgeny
11.03.2017
10:38:50
смотрел этот код - но не очень понял, кэш протухает (т.е. должен очищатся) через 10 * какое то время в секундах

Vladimir
11.03.2017
10:41:00
при добавлении в кэш он проверяет есть ли еще у него память доступная

если нет то удаляет какую-нибудь запись

https://github.com/dgryski/go-expirecache/blob/master/cache.go#L75

логика вообще следующая

при добавлении элемента в кэш ему устанавливается время жизни

кэш таймаут по умолчанию 60 секунд (как у графита), меняется &cacheTimeout=время_в_секундах

https://github.com/dgryski/carbonapi/blob/master/main.go#L287

вот в этом месте

каждые 10 секунд горутина просыпается и удаляет те записи которые уже протухли из кэша

674-ая строка это как раз ее запуск

Evgeny
11.03.2017
10:44:52
при старте я вижу установку параметров в логе

2017/03/11 13:42:54 starting carbonapi (development build) 2017/03/11 13:42:54 using zipper http://127.0.0.1:8084 2017/03/11 13:42:54 using GOMAXPROCS 8 2017/03/11 13:42:54 Using graphite host 127.0.0.1:2003 2017/03/11 13:42:54 setting stats interval to 1m0s 2017/03/11 13:42:54 listening on port 8082 2017/03/11 13:42:54 Serving [::]:8082 with pid 20801

а memsize почему то нет

Google
Vladimir
11.03.2017
10:45:13
0 - безлимит

выставь ему туда -memsize=$((1024*1024*1024*12)) # (12GB)

должно полегчать

наверное умолчания неправильные и надо ограничивать в процентах от свободной памяти

например 50%

но мы умолчания под себя делали

Evgeny
11.03.2017
10:46:45
root 20801 0.0 0.4 740284 299848 ? Sl 13:42 1:58 /usr/sbin/carbonapi -cpus 8 -graphite 127.0.0.1:2003 -i 1m -p 8082 -memsize 100 -z http://127.0.0.1:8084

в описании написано что в мегабайтах задавать - или не так ?

Vladimir
11.03.2017
10:47:14
а да, сорри

Evgeny
11.03.2017
10:48:29
я как бы и 100 писал и 1000 - это ни на что не влияет... процесс все равно ест все что есть

Vladimir
11.03.2017
10:48:35
То есть вы его ограничили, но ограничение не работает?

@ihard а можешь снять heap profile?

Vladimir
11.03.2017
10:48:48
и отправить свгшку?

go tool pprof http://localhost:8082/debug/pprof/heap

сделать например top10

и показать list на функцию

(требует сборки через go build -a или наличия сырцов софтины на этой машине)

Evgeny
11.03.2017
10:51:14
щас попробую

Vladimir
11.03.2017
10:51:33
можно сделать curl http://localhost:8082/debug/pprof/heap > memory.profile

и утащчить файл на другой хост, где сырцы

Google
Vladimir
11.03.2017
11:00:06
а еще вопрос - какой коммит используется?

Evgeny
11.03.2017
11:02:07
sysctl vm.overcommit_memory vm.overcommit_memory = 2

Vladimir
11.03.2017
11:02:38
я про другое )

я про то какой carbonapi?

и ООМ вызывает именно api?

Evgeny
11.03.2017
11:03:53
memory.profile - утянул на машину где собирал, как посмотреть дальше ?

Vladimir
11.03.2017
11:04:08
go tool pprof бинарник path/to/memory.profile

бинарь который собран тоже нужен

Evgeny
11.03.2017
11:05:38
go tool pprof /usr/sbin/carbonapi memory.profile Entering interactive mode (type "help" for commands) (pprof) top10 32255.44kB of 32255.44kB total ( 100%) Dropped 197 nodes (cum <= 161.28kB) Showing top 10 nodes out of 29 (cum >= 31743.24kB) flat flat% sum% cum cum% 20121.57kB 62.38% 62.38% 20121.57kB 62.38% github.com/dgryski/carbonzipper/carbonzipperpb.(*GlobResponse).Marshal 6871.30kB 21.30% 83.68% 9109.02kB 28.24% github.com/dgryski/carbonapi/expr.MarshalJSON 2237.72kB 6.94% 90.62% 2237.72kB 6.94% strconv.formatBits 902.59kB 2.80% 93.42% 1451.43kB 4.50% compress/flate.NewWriter 548.84kB 1.70% 95.12% 548.84kB 1.70% compress/flate.(*compressor).init 548.84kB 1.70% 96.82% 548.84kB 1.70% github.com/dgryski/go-expirecache.(*Cache).Set 512.38kB 1.59% 98.41% 512.38kB 1.59% net/url.Values.Encode 512.20kB 1.59% 100% 512.20kB 1.59% runtime.malg 0 0% 100% 1451.43kB 4.50% compress/gzip.(*Writer).Write 0 0% 100% 31743.24kB 98.41% github.com/gorilla/handlers.(*combinedLoggingHandler).ServeHTTP

Vladimir
11.03.2017
11:07:48
@ihard то есть памяти аллоцировано мало совсем

Admin
ERROR: S client not available

Evgeny
11.03.2017
11:08:09
щас я сэмулирую нагрузку

go tool pprof /usr/sbin/carbonapi /tmp/memory.profile Entering interactive mode (type "help" for commands) (pprof) top10 11480.93MB of 11596.75MB total (99.00%) Dropped 228 nodes (cum <= 57.98MB) Showing top 10 nodes out of 16 (cum >= 11479.61MB) flat flat% sum% cum cum% 11453.66MB 98.77% 98.77% 11453.66MB 98.77% github.com/dgryski/carbonzipper/carbonzipperpb.(*FetchResponse).Unmarshal 25MB 0.22% 98.98% 11504.61MB 99.21% main.renderHandler.func1 2.26MB 0.02% 99.00% 90.14MB 0.78% main.renderHandler 0 0% 99.00% 11453.66MB 98.77% github.com/dgryski/carbonzipper/carbonzipperpb.(*MultiFetchResponse).Unmarshal 0 0% 99.00% 90.14MB 0.78% github.com/gorilla/handlers.(*combinedLoggingHandler).ServeHTTP 0 0% 99.00% 90.14MB 0.78% github.com/gorilla/handlers.(*cors).ServeHTTP 0 0% 99.00% 90.14MB 0.78% github.com/gorilla/handlers.CompressHandlerLevel.func1 0 0% 99.00% 90.14MB 0.78% github.com/gorilla/handlers.combinedLoggingHandler.ServeHTTP 0 0% 99.00% 90.14MB 0.78% main.main.func3 0 0% 99.00% 11479.61MB 98.99% main.zipper.Render

/usr/sbin/carbonapi -cpus 8 -graphite 127.0.0.1:2003 -i 1m -p 8082 -memsize 100 -z http://127.0.0.1:8084

собирал 28 января - этот коммит последний получается https://github.com/dgryski/carbonapi/commit/9a17fbb1e6a1c42edfd3805bf7c7a70a875820a9

Vladimir
11.03.2017
11:14:47
Кажется что там основное это unmarshal, а не кэш

могу посоветовать попробовать обновить и carbonapi и zipper (если используете) и go-carbon до версии поддерживающей protobuf3, там вроде бы потребление памяти уменьшилось

а так в целом - какое количество запросов, сколько примерно метрик в запросе матчится?

за какие примерно периоды

Evgeny
11.03.2017
11:18:47
период 14 дней метрик 100 000 где то

Google
Vladimir
11.03.2017
11:19:49
это в 1 запрос 100 тысяч?

Evgeny
11.03.2017
11:19:50
попробую пересобрать

Vladimir
11.03.2017
11:20:15
я про колличество запросов в секунду, среднее колличество точек в результате на запрос

Потому что 11ГБ это довольно большие запросы выходят

Evgeny
11.03.2017
11:23:05
на графике 3 запроса в каждом где то по 30000 метрик уникальных, если период несколько часов то все норм, несколько дней если период - то память начинает кончаться

carbonzipper не используется - carbonapi сразу в carbonserver (go-carbon) смотрит, если добавить carbonzipper врядли поможет в такой ситуации ?

Vladimir
11.03.2017
11:29:23
не, не поможет

тут надо либо смотреть как carbonapi (точнее в целом unmarshal и передачу данных) оптимизировать, либо больше памяти и железа...

Evgeny
11.03.2017
11:30:47
ок спасибо

Vladimir
11.03.2017
11:31:00
можешь тикет завести с описанием кейса? Чтобы как минимум не потерялось

Pavel
11.03.2017
11:31:05
30 000 метрик для графита - это 30 000 файлов

Vladimir
11.03.2017
11:31:28
30 000 метрик для графита - это 30 000 файлов
там тупо при маршалинге в текущем виде - 10 байт на 1 точку

Pavel
11.03.2017
11:31:30
я бы начал с осмотра состояния сервера в целом и медитации на iotop и perf top

Vladimir
11.03.2017
11:31:59
то есть 14 дней по минуте это 14*60*24 = 20160 точек

то есть 200кб на метрику

их 100000

Pavel
11.03.2017
11:32:20
static_assert(sizeof(whisper_point_t) == 12, "Broken size for whisper_point_t");

Evgeny
11.03.2017
11:32:22
https://github.com/dgryski/carbonapi/issues/191 - завел, приложу perf

Vladimir
11.03.2017
11:32:31
Pavel
11.03.2017
11:32:36
12 байт там точка. double + timestamp 32битный

Vladimir
11.03.2017
11:32:45
@pavel_odintsov ты про другое совсем

в этом случаи это 10 байт на точку

апроксимировано

Страница 121 из 681