reklama

Segmentation fault

Re:Segmentation fault
« Odpověď #15 kdy: 31. 03. 2020, 13:41:57 »
Od doby co jsem ten program spustil přes Valgrind, ani jednou to nespadlo. Je to v podstatě od doby co běží toto vlákno. Když ten program ručně kylnu třeba po několika dnech, vypíše mi to přibližně toto:
Kód: [Vybrat]
==30609==   total heap usage: 7,366,709 allocs, 7,366,674 frees, 686,513,208 bytes allocated
==30609==
==30609== LEAK SUMMARY:
==30609==    definitely lost: 0 bytes in 0 blocks
==30609==    indirectly lost: 0 bytes in 0 blocks
==30609==      possibly lost: 304 bytes in 1 blocks
==30609==    still reachable: 246,510 bytes in 34 blocks
==30609==         suppressed: 0 bytes in 0 blocks
==30609== Rerun with --leak-check=full to see details of leaked memory
==30609==
==30609== For counts of detected and suppressed errors, rerun with: -v
==30609== Use --track-origins=yes to see where uninitialised values come from
==30609== ERROR SUMMARY: 3971 errors from 23 contexts (suppressed: 0 from 0)
Takže stále pátrám...

reklama


Re:Segmentation fault
« Odpověď #16 kdy: 31. 03. 2020, 14:12:07 »
Jen taková drobnost. Má to víc threadů?
Jestli jo, nepomůže to linknout s "-z now"?

Re:Segmentation fault
« Odpověď #17 kdy: 01. 04. 2020, 07:52:57 »
Já ta mám vlákna přesně dvě. Jedno hlavní, které dělá většinu věcí. To druhé dělá jen jednu jedinou věc a tou je příjem SSH spojení. Tento příjem se mi totiž nepovedlo udělat jako neblokující.

Re:Segmentation fault
« Odpověď #18 kdy: 01. 04. 2020, 08:24:38 »
V tom případě Helgrind. Ale připrav se na to, že hlásí spoustu false positives pro veškerou sychronizaci, která se nedělá přes pthread sychronizační primitiva, budeš se tím muset probrat

Re:Segmentation fault
« Odpověď #19 kdy: 02. 04. 2020, 08:55:54 »
Dvě hypotézy:

a. Problém se týká práce se stackem, což Valgrind AFAIR nedetekuje. (Ono to ani není snadné u zkompilovaného programu. V případě heapu může nahradit dynamicky linkované funkce pro práci s pamětí, v případě stacku to asi nebude tak jednoduché.)
b. Problém se projeví jen pří souběhu více vláken. AFAIR Valgrind dost omezuje souběžnost vláken.

Zmíněný Helgrind může pomoci na kontrolu problémů se souběžností.

Kontrolu problémů na stacku by moho jít udělat pomocí managed implementace LLVM v GraalVM EE: https://medium.com/graalvm/safe-and-sandboxed-execution-of-native-code-f6096b35c360
* Vyžádá si to ale zkompilovat stejným způsobem i použité knihovny. Nedovedu od stolu vyhodnotit, jak jednoduché nebo náročné to bude v tomto případě.
* Samozřejmě se odchylujete od produkčního prostředí. To není ideální, ale asi se tomu úplně nevyhnete.
* Enterprise Edition je zdarma za určitých podmínek, možná by se tam vešel i tento případ. Rozhodně ale nejsem právník a tento komentář píšu sám za sebe, ne za svého zaměstnavatele.
GraalVM Developer v Oracle Labs. Názory jsou moje vlastní, nemusejí se shodovat se stanoviskem mého zaměstnavatele.

reklama


 

reklama