Categories
工作总结

一次Druid crash问题分析

问题的表现是:Overlord上所有的任务全部失败。

Druid日志分析

通过观察失败的任务执行日志发现,日志结尾有很多等待Handoff完成的日志,并且等待半个小时后任务退出,除此之外没有发现其它明显异常信息。

Still waiting for Handoff for Segments ...
Still waiting for Handoff for Segments ...
Still waiting for Handoff for Segments ...
...

在Druid中Handoff表示Historical从deep-storage中拉取segment。Handoff是由Coordinator节点调度完成的,所以我们查看Coordinator日志,发现如下异常:

org.apache.druid.server.coordinator.helper.DruidCoordinatorRuleRunner - Uh... I have no servers. Not assigning anything...

经过调查代码发现”I have no servers”中的servers指的是Historical节点,也就是说Coordinator找不到Historical节点了。

在Druid中overlord节点负责调度任务,因为是任务失败,所以我们调查overlord日志。发现有大量的overlord主动kill任务的日志,看来是overlord主动kill了任务,这是任务全部失败的最直接原因。至于为什么overlord主动kill了任务,姑且先搁置,后文会回答。

org.apache.druid.indexing.kafka.supervisor.KafkaSupervisor - Killing task[index_kafka_browser_anr_kv_event_bd898e42ff88d7e_egidmcno] in the task group

hs_err_pid.log分析

通过上边Druid日志分析,发现Coordinator找不到Historical节点了。进而观察Historical节点情况,发现所有的Historical进程都异常退出。好在有JVM进程的hs_err_pid.log日志,接下来分析hs_err_pid.log,来以定位进程崩溃的具体原因。

首先是hs_err_pid.log日志的header部分,该部分总结了进程崩溃的原因,可以看到是因为内存不足。

#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 262144 bytes for committing reserved memory.
# Possible reasons:
# The system is out of physical RAM or swap space
# In 32 bit mode, the process size limit was hit
...

但是具体是JVM内存不足,还是操作系统内存不足呢?看hs_err_pid.log最后的操作系统内存信息部分,发现进程崩溃是还有大概35GB空闲内存,所以排除了操作系统内存不足的原因。

Memory: 4k page, physical 131489932k(35941924k free), swap 0k(0k free)

接下来调查JVM内存情况,通过看hs_err_pid.log的GC部分,可以看到进程崩溃前的JVM内存的一些信息。

Event: 48.851 GC heap before
{Heap before GC invocations=15 (full 5):
 PSYoungGen      total 12104192K, used 800K [0x00007f6797b00000, 0x00007f6aed000000, 0x00007f6aed000000)
  eden space 10208256K, 0% used [0x00007f6797b00000,0x00007f6797b00000,0x00007f6a06c00000)
  from space 1895936K, 0% used [0x00007f6a79480000,0x00007f6a79548000,0x00007f6aed000000)
  to   space 1876480K, 0% used [0x00007f6a06c00000,0x00007f6a06c00000,0x00007f6a79480000)
 ParOldGen       total 9509888K, used 2561944K [0x00007f60ed000000, 0x00007f6331700000, 0x00007f6797b00000)
  object space 9509888K, 26% used [0x00007f60ed000000,0x00007f61895e60f0,0x00007f6331700000)
 Metaspace       used 62706K, capacity 64074K, committed 64512K, reserved 65536K
Event: 50.753 GC heap after
Heap after GC invocations=15 (full 5):
 PSYoungGen      total 12104192K, used 0K [0x00007f6797b00000, 0x00007f6aed000000, 0x00007f6aed000000)
  eden space 10208256K, 0% used [0x00007f6797b00000,0x00007f6797b00000,0x00007f6a06c00000)
  from space 1895936K, 0% used [0x00007f6a79480000,0x00007f6a79480000,0x00007f6aed000000)
  to   space 1876480K, 0% used [0x00007f6a06c00000,0x00007f6a06c00000,0x00007f6a79480000)
 ParOldGen       total 9509888K, used 2557628K [0x00007f60ed000000, 0x00007f6331700000, 0x00007f6797b00000)
  object space 9509888K, 26% used [0x00007f60ed000000,0x00007f61891af160,0x00007f6331700000)
 Metaspace       used 62706K, capacity 64074K, committed 64512K, reserved 65536K
}

可见在GC前后JVM内存都没有短缺的情况,同时在Historical日志中也没有发现OOM异常。通过这两点可以确认,JVM内存不是导致Historical进程崩溃的原因。

直接原因

通过hs_err_pid.log得出的进程崩溃是由于内存不足导致的,这个结论是不会错的。不是内存的物理限制,也不是JVM限制,想到还有一种可能性就是操作系统限制了进程的内存。因为即便是我们自己编写的程序都会对资源的使用进行限制,按照这样的思路,操作系统大概率会对进程内存进行限制。经调查发现这么一个参数vm.max_map_count,它表示一个进程最大能mmap多少个内存区块。按照这个思路进行调查:

  1. 当前服务器vm.max_map_count参数值
cat /proc/sys/vm/max_map_count 
65530
  1. 在hs_err_pid.log文件中,统计崩溃前进程mmap内存块的数量
# 注:hs_err_pid.log_bak文件只保留了hs_err_pid.log的mmap部分
wc -l hs_err_pid.log_bak 
65533 hs_err_pid.log_bak

可以看到已经达到了最大限制,至此得出了进程崩溃的直接原因,Historical进程mmap超过了操作系统限制。

进一步原因

接下来看看Historical进程mmap了什么东西,通过观察统计hs_err_pid.log_bak,发现绝大部分是browser_iflow_abtest_common这个datasource的相关文件,总共有5w多。

grep "/var/druid/segment-cache/browser_iflow_abtest_common" hs_err_pid.log | wc -l
52162

继续查看到browser_iflow_abtest_common这个datasource在一个小时内就生成了2000多的小segment,显然这是不合理的。进一步调查产生小segment的原因,发现browser_iflow_abtest_common的“maxRowsPerSegment“参数设置为了50000,对于一个一天有100亿级别数据量的datasource来说显然是极其不合理的。

将上边一连串的分析总结如下:由于datasource参数“maxRowsPerSegment”的不当设置,导致产生了大量的小segment,因为查询涉及到了这些segment,导致服务器mmap count达到限制,进而导致了Historical挂掉。

Historical挂掉导致新的构建任务的segment Handoff一直不能完成,当任务达到超时时间时,Overlord就主动kill了任务,最终表现为大面积构建任务失败的现象。

至此问题分析结束。

处理措施

问题已经很清楚了,问题处理方式也很明显:

  1. 调高maxRowsPerSegment参数,我们设置为1000w
  2. 调高Druid节点的vm.max_map_count参数,我们设置为655300

参考文档:

4,831 replies on “一次Druid crash问题分析”

Its such as you read my thoughts! You appear to grasp
a lot about this, like you wrote the e-book in it or something.
I think that you simply could do with a few percent to power the message house a little bit, but other
than that, this is fantastic blog. An excellent read.

I’ll certainly be back.

What i don’t realize is in fact how you’re no longer really much more neatly-appreciated than you may be now.
You are so intelligent. You already know therefore significantly relating to this topic, produced me individually believe it
from so many varied angles. Its like women and men don’t seem
to be interested until it’s one thing to accomplish with Woman gaga!

Your personal stuffs nice. Always take care of it up!

Wonderful beat ! I wish to apprentice while you amend
your web site, how can i subscribe for a blog web site?
The account helped me a acceptable deal. I
had been tiny bit acquainted of this your broadcast offered bright clear idea

Hey there! This post couldn’t be written any better!
Reading this post reminds me of my good old room
mate! He always kept talking about this. I will forward this post to him.
Pretty sure he will have a good read. Thanks for sharing!

Hello, I believe your website could possibly be having internet browser compatibility problems.
When I take a look at your website in Safari, it looks fine however when opening
in Internet Explorer, it’s got some overlapping issues.

I merely wanted to provide you with a quick heads up!
Besides that, great site!

Hi there this is kinda of off topic but I was wondering if blogs use WYSIWYG editors or if
you have to manually code with HTML. I’m starting
a blog soon but have no coding expertise so I wanted to
get advice from someone with experience. Any help would
be enormously appreciated!

Whats up this is kind of of off topic but I was wondering if blogs use WYSIWYG editors or if you have to manually code with
HTML. I’m starting a blog soon but have no coding skills
so I wanted to get guidance from someone with
experience. Any help would be greatly appreciated!

Телефон с двумя SIM-картами
Телефон с двумя SIM-картами — это мобильный телефон, обычно смартфон, с возможностью использования двух SIM- карт модуля идентификации абонента.
SIM-карта — это смарт-карта, для которой хранятся причина о владельце, включая идентификационные причина и предпочтения пользователя, местоположение и комната телефона, причина авторизации в сети, личные ключи безопасности, списки контактов и сохраненные текстовые сообщения. Дабы передать данные для новый телефон, пользователю достаточно вынуть SIM-карту из одного телефона и вставить ее в другой.
Телефоны с двумя SIM-картами используются ради ряда целей, включая следующие:
Два человека могут иметь одним телефоном, круг со своим номером телефона и данными, хранящимися для разных SIM-картах. Смотри тут самсунг сенсорный телефон дешевый https://smartfonresurs.ru/xiaomi-mi-note-10-lite-64-gb-dve-sim-karty-xiaomi/ телефоны в днс сенсорные самые дешевые.
В среде BYOD сотрудники могут иметь свои личные номера и причина повизитно от рабочих.
Человек могут совмещать работник и домашний номера на одном телефоне, а не заключать дело с отдельными телефонными трубками.
Путешественники могут приобрести местную SIM-карту, чтобы избежать платы ради роуминг, оставаясь быть этом доступными по своему обычному номеру.
Вы совершенно прекрасно знаете, сколько две SIM-карты — главная качество наших телефонов. С самого начала Wiko оборудовала отдельный из своих телефонов функцией двух SIM-карт.
Только что такое двойная SIM-карта и как она работает?
Занятие двух SIM-карт позволяет пользователю разом извлекать две разные услуги без необходимости использования двух отдельных телефонов. Примем, соло и тот же телефон дозволено использовать для личных и профессиональных целей с разными номерами и разными счетами тож чтобы путешествий с конкретной SIM-картой чтобы страны назначения.
Благодаря этой функции двух SIM-карт с вами дозволительно связаться сообразно обоим номерам с одного телефона.
Существует скольконибудь различных типов двойных SIM-карт, предлагающих различные функции. Наши телефоны Wiko оснащены SIM DUAL STANDBY — обе SIM-карты могут пить звонки. Все быть подключении вызова для одну SIM-карту другая перестает толкать активной и всегда входящие вызовы перенаправляются для голосовую почту. Прежде сих пор безвыездно наши модели были оснащены мини-слотами (обычными) SIM-картами.
DARKMOON довольно иметь слот чтобы мини-SIM и слот для микро-SIM, а DARKFULL — два слота ради микро-SIM.
Самые ранние телефоны с двумя SIM-картами были простой адаптерами (псевдо-двойными или пассивными), сколько означало, сколько, хоть они могли перемещать две карты, в всякий момент времени работала один одна, и вам приходилось переключаться посреди ними при необходимости. Едва более развитая образец — Dual Sim Stalwart, где обе карты работают враз, однако при поступлении вызова на одну карту другая деактивируется на эпоха разговора.
Телефоны Dual Sim On the go (DSA) теперь более распространены: они способны принимать вызовы для обе SIM-карты, а более продвинутые модели позволяют пользователям принимать требование для пара номера зараз, сколько называется Dual Invoke либо Dual Active.
Некоторые модели, имея два слота, не дают одинаковой функциональности обоим: положим, главный слот чтобы карты обеспечивает быстрый мобильный интернет 3G разве 4G, а дополнительный слот может обретаться ограничен более медленным 2G.

It’s the best time to make some plans for the future and it’s time
to be happy. I’ve read this post and if I could I
want to suggest you some interesting things or suggestions.
Perhaps you can write next articles referring to this article.
I desire to read even more things about it!

Телефон с двумя SIM-картами
Телефон с двумя SIM-картами — это мобильный телефон, обычно смартфон, с возможностью использования двух SIM- карт модуля идентификации абонента.
SIM-карта — это смарт-карта, для которой хранятся причина о владельце, включая идентификационные данные и предпочтения пользователя, местоположение и номер телефона, данные авторизации в сети, личные ключи безопасности, списки контактов и сохраненные текстовые сообщения. Воеже передать данные для другой телефон, пользователю довольно вынуть SIM-карту из одного телефона и вставить ее в другой.
Телефоны с двумя SIM-картами используются ради ряда целей, включая следующие:
Два человека могут использовать одним телефоном, круг со своим номером телефона и данными, хранящимися для разных SIM-картах. Смотри тут дешевые телефоны хорошие сенсорные https://smartfonresurs.ru/xiaomi-mi-note-10-lite-64-gb-dve-sim-karty-xiaomi/ сенсорный телефон дешевый связной.
В среде BYOD сотрудники могут совмещать свои личные номера и причина оазисами через рабочих.
Человек могут обладать работник и непосредственный номера для одном телефоне, а не иметь битва с отдельными телефонными трубками.
Путешественники могут приобрести местную SIM-карту, для избежать платы изза роуминг, оставаясь около этом доступными сообразно своему обычному номеру.
Вы однако прекрасно знаете, который две SIM-карты — главная особенность наших телефонов. С самого начала Wiko оборудовала круг из своих телефонов функцией двух SIM-карт.
Только что такое двойная SIM-карта и наравне она работает?
Занятие двух SIM-карт позволяет пользователю разом извлекать две разные услуги без необходимости использования двух отдельных телефонов. Предположим, безраздельно и тот же телефон позволительно использовать ради личных и профессиональных целей с разными номерами и разными счетами тож чтобы путешествий с конкретной SIM-картой ради страны назначения.
Благодаря этой функции двух SIM-карт с вами можно связаться сообразно обоим номерам с одного телефона.
Существует несколько различных типов двойных SIM-карт, предлагающих различные функции. Наши телефоны Wiko оснащены SIM DUAL STANDBY — обе SIM-карты могут пить звонки. Однако около подключении вызова на одну SIM-карту другая перестает крыться активной и все входящие вызовы перенаправляются на голосовую почту. Накануне сих пор все наши модели были оснащены мини-слотами (обычными) SIM-картами.
DARKMOON довольно иметь слот чтобы мини-SIM и слот ради микро-SIM, а DARKFULL — два слота чтобы микро-SIM.
Самые ранние телефоны с двумя SIM-картами были просто адаптерами (псевдо-двойными или пассивными), что означало, который, чтобы они могли перемещать две карты, в любой момент времени работала как одна, и вам приходилось переключаться между ними около необходимости. Лишь более развитая форма — Dual Sim Substitute, где обе карты работают одновременно, но присутствие поступлении вызова для одну карту другая деактивируется на дата разговора.
Телефоны Dual Sim On the go (DSA) теперь более распространены: они способны пить вызовы на обе SIM-карты, а более продвинутые модели позволяют пользователям брать требование для оба номера зараз, который называется Dual Invoke иначе Dual Active.
Некоторые модели, имея два слота, не дают одинаковой функциональности обоим: возьмем, главный слот ради карты обеспечивает быстрый мобильный интернет 3G или 4G, а дополнительный слот может толкать ограничен более медленным 2G.

Точно работают телефоны с двумя SIM-картами?
Что-то, сколько мы заметили быть покупке телефонов с двумя SIM-картами, заключается в часть, сколько производитель колоссально иногда предоставляет какую-либо информацию о функциональности, кроме того, что она существует. В нем не говорится, будто для практике работает функция двух SIM-карт, поддерживают ли обе SIM-карты 4G/5G и даже SIM-карты какого размера они принимают.
Смотри тут телефон сенсорный андроид дешево https://smartfonresurs.ru/huawei-y7-2019-32-gb-dualsim-huawei/ самые дешевые телефоны сенсорным экраном.
Вы николи не можете предполагать; вам надо будет связаться с производителем разве проверить таблицы спецификаций, обзоры иначе форумы, для испытывать эту информацию.
Во всех телефонах с двумя SIM-картами, которые мы тестировали, обе SIM-карты неустанно находятся в режиме ожидания (беспричинно называемые телефоны с двумя SIM-картами), только вы можете активно использовать всего одну SIM-карту изза раз. Это означает, что любая SIM-карта может принять телефонный звонок либо текстовое известие в любое сезон без необходимости активного переключения между ними иначе перезагрузки телефона.
Все, коль вы получаете требование для одинокий номер, в то время как требование активен на другом, он не начнет звонить вам в ухо разве не даст вам мочь перевести первого звонящего на удержание – требование простой не будет успешным.
В чем разница промеж Dual-Standby и Dual-Active?
Телефоны с двумя активными SIM-картами используют два модема и позволяют принимать звонки зараз для пара номера.
Ежели вы хотите звать alias отправить текст, в Android потреблять стандартное список «Управление SIM-картой», которое позволяет вам указать, какая SIM-карта должна использоваться для голосовых вызовов, видеовызовов, сообщений и мобильных данных. Вы можете либо указать конкретную SIM-карту чтобы каждой из этих задач, либо оставить параметр «Навеки спрашивать».
Когда произведение доходит предварительно телефонов с двумя SIM-картами, подключение чтобы передачи данных вызывает видимоневидимо путаницы. В то сезон наподобие пара слота ради SIM-карт на некоторых телефонах с двумя SIM-картами могут помогать соединения 4G разве 5G, вы можете враз использовать подключение ради передачи данных токмо для одной SIM-карте.
В награда через звонков и текстовых сообщений, обычно слияние для передачи данных не может находиться в режиме ожидания для обеих SIM-карт; вы должны указать, какую SIM-карту вы хотите извлекать, а не избирать ее быть появлении запроса — что некоторые телефоны позволяют вам настроить их для переключение на другую SIM-карту, когда первая не может установить соединение.
По умолчанию, когда вы используете подключение для передачи данных на одной SIM-карте, а телефонный звонок поступает на другую, он приостанавливает подключение для передачи данных для первой.
Сортировка смартфона или планшета — это единственно начало. В этом мире постоянного подключения сорт и живость выбранной вами тенета имеют решающее важность чтобы вашей способности корпеть и шалить в дороге. Но какая мобильная сеть лучше? Чтобы простого ответа не существует, мы здесь, воеже помочь вам решить, какая козни лучше всего соответствует вашим потребностям.
Мочь подключения может варьироваться от региона к региону и изо дня в день. Посетите веб-сайты всех основных игроков, и они скажут вам, сколько везде у них отличное покрытие. Действительно больше нюансов.

I have been browsing online more than 4 hours today, yet I never found any interesting article like yours. It’s pretty worth enough for me. In my view, if all website owners and bloggers made good content as you did, the internet will be a lot more useful than ever before.|

Adapted utilization of ivermektiini 3 mg tabletti. ivermectin for humans to buy now dosage is largest entranced as a sole prescribe with a non-restricted barometer (8 ounces) of damp on an deserted inclination (1 hour before breakfast), unless otherwise directed through your doctor. To expropriate certain up your infection, plagiarize this medication precisely as directed. Your doctor may want you to engage another dose every 3 to 12 months. Your doctor may also rule a corticosteroid (a cortisone-like medicine) to save indubitable patients with river blindness, particularly those with cold symptoms. This is to facilitate reduce the inflammation caused before the eradication of the worms. If your doctor prescribes these two medicines together, it is important to imbibe the corticosteroid along with pour-on ivermectin for cats. Gain possession of them exactly as directed sooner than your doctor. Do not overlook any doses. Dosing. The measure of this medicine drive be different on contrasting patients. Bring up the rear your doctor’s orders or the directions on the label. The following information includes only the average doses of this medicine. If your prescribe is separate, do not change it unless your doctor tells you to do so. The amount of prescription that you clutch depends on the tenacity of the medicine. Also, the few of doses you take each day, the experience allowed between doses, and the completely of nevertheless you require the medicament depend on the medical problem in behalf of which you are using the medicine.

I love your blog.. very nice colors & theme. Did you design this website yourself or
did you hire someone to do it for you? Plz answer back as I’m
looking to create my own blog and would like to find out where u got this from.
thank you