freebsd signal 10

iravik

Есть у меня демон, написанный на сях, который работает под центосом довольно давно. Когда я запустил его на фрибсд (предварительно скомпилив под фрю офк то он тоже поначалу работал, но в один момент он начал получать огромный поток signal 10. Гугление к сожалению мне не помогло, я толком не понял, кто может слать такой сигнал под фрей.
Если демон перезапустить, то он продолжает получать поток сигналов. Если же его перекомпилить и запустить, то он перестает получать этот сигнал.
Собственно у меня вопрос: что может означать этот сигнал и кто его может слать?

Marinavo_0507

SIGBUS обычно означает какую-то ошибку в работе с вируальной памятью - например обращение к странице, которая уже была размаплена
это если нет оснований подозревать глюки железа

margadon

а под valgrind-ом его гонял?

iravik

пока нет, так как очень сложно отловить момент, когда возникает эта херь. Он может неделями работать и все ок.

iravik

у меня демон работает с шаренной памятью. Некорректная работа с ней может вызвать такой сигнал?

Marinavo_0507

может наверное
вон пишут например такое может выдать SIGBUS:

unsigned char *x = "text";
int main{
x[2] = 's';
}

iravik

ага, видел этот пример. Но меня больше всего смущает то, что под линуксом он уже несколько лет работал, и никаких проблем не было.

Marinavo_0507

дык рантайм-окружение разное
например обычный malloc и free по-разному ведёт
может быть, на одной системе можно получить доступ к блоку, который недавно был особождён через free, на другой нет
в первом случае free просто добавляет блок в список свободных, а во втором например размапливает страницу, где он располагался

iravik

ну и еще меня смущает, что простая перекомпиляция избавляет от этой херни. То есть на выходе получается ровно такой же бинарник (судя по размеру но тем не менее это помогает)

Marinavo_0507

То есть на выходе получается ровно такой же бинарник (судя по размеру но тем не менее это помогает)
попробуй вместо перекомпиляции например такое:
cp ./program ./program.new
mv ./program-new ./program
если такое поможет, то я бы подумал на баг в ядре или в железе
а хотя нет
если у тебя system V shared memory - то какой ты указываешь ключ?

iravik

попробуй вместо перекомпиляции например такое:
cp ./program ./program.new
mv ./program-new ./program
хм, надо попробовать
если у тебя system V shared memory - то какой ты указываешь ключ?
я с шаренной памятью общаюсь через файл

carusya

То есть на выходе получается ровно такой же бинарник (судя по размеру)
А хэшу?

iravik

хз, не смотрел

iravik

cp ./program ./program.new
mv ./program-new ./program
если такое поможет, то я бы подумал на баг в ядре или в железе
в общем это помогло, спасибо) Перенесу значит на линукс этот демон, раз такие дела

margadon

эмн. не сильно моё дело, но за державу обидно(с)
не слишком ли быстро вы свалили всё на железо?..
что на линуксе десять лет работало а тут падает - не убеждает ни разу...
всё-таки под валгриндом прогнать не то чтобы сильно сложно, а вероятность отловить малоприметный баг при его наличии - достаточно велика

iravik

всё-таки под валгриндом прогнать не то чтобы сильно сложно
я тут для себя открыл, что валгринд официально под фрибсд не поддерживается. Есть какая-то поделка, но написано, что ее работа непредсказуема. Или все равно попробовать эту штуку заинсталлить?

margadon

да ты под линуксом его прогони, он там навыдаёт всего подозрительного, а ты глазами отсмотри
под фряху его не использовал, хотя слышал есть порты

iravik

а, это можно

iravik

Если вдруг кому интересно, то по итогам пидарасом оказался все-таки я. Нашел херню, приводящую с неопределенному поведению. То, что это этот демон несколько лет не падал, было лишь везением. Ему ни разу не приходило "плохих" данных, которые бы вызвали херню. А теперь вот пришли :)

VitMix

очень сложно отловить момент, когда возникает эта херь
Когда приходит SIGBUS, core.dump файл создаётся? Если да, то из него можно много чего узнать о причинах проблемы.

Ventalf

cp ./program ./program.new
mv ./program-new ./program
интересно вчем фишка тут и как это работает?

Marinavo_0507

может какой-нибудь кэш сохраняется между запусками из-за бага (или даже не баг, а фича - во всяких posix и sus разные штуки есть неочевидные)

bleyman

Ну расскажи же может быть где налажал, а?

Anturag

Ставлю на то, что вылез за границу заммапленной области памяти.

iravik

Ставлю на то, что вылез за границу заммапленной области памяти.
ну типа того. У меня там есть memcpy с макс длинной 256, а тут внезапно стали приходить большие строки. Ну и проблема была в том, что я копирую строку через memcpy, а длину этого куска запоминаю как size от string :)

Ventalf

может какой-нибудь кэш сохраняется между запусками из-за бага (или даже не баг, а фича - во всяких posix и sus разные штуки есть неочевидные)

вы сказали так как будто это универсальное решение для некоторого рода проблем
вы это где то прочитали или случайно попробовали?
и если прочитали то где?

Marinavo_0507

это универсальный способ создать другой файл (с точки зрения ФС) с тем же содержимым
а если брать более широкий класс проблем, то есть довольно универсальный метод - бинарный поиск (метод деления пополам)
согласно этому методу, я нашёл среднее между перезапуском и перекомпиляцией

Ventalf

прочитав первый раз пытался понять смысл вооброзив какое то бинарное дерево
и наконец прочитав во второй раз понял в чем суть сообщения :)
Оставить комментарий
Имя или ник:
Комментарий: