Linux gcc, slukar programmet resurser?
Linux gcc, slukar programmet resurser?
Då och då inträffar magiska fenomen på min Linux-burk, som är igång 24/7. En reboot får sedan allt att fungera igen.
Jag använder ett hemmaskrivet program i gcc hyfsat mycket. Har börjat misstänka ett samband. Hur tar jag reda på att det verkligen släpper alla resurser när processen terminerar?
Jag använder ett hemmaskrivet program i gcc hyfsat mycket. Har börjat misstänka ett samband. Hur tar jag reda på att det verkligen släpper alla resurser när processen terminerar?
Re: Linux gcc, slukar programmet resurser?
Det gör man vid att avyttra dom när de inte behövs längre - samt vid att lägga in destructors vid programavslut.
Jag antar att resurserna är dynamisk minne och jag brukar göra så att pekarna på tilldelad minne ställs till NULL vid uppstart SAMT EFTER DESTRUKTORN ÄR KÖRT. Då kan ytterligare "släpp" av minnen inte genomföras och man får ett fel man kan ignorera om man vill.
Jag antar att resurserna är dynamisk minne och jag brukar göra så att pekarna på tilldelad minne ställs till NULL vid uppstart SAMT EFTER DESTRUKTORN ÄR KÖRT. Då kan ytterligare "släpp" av minnen inte genomföras och man får ett fel man kan ignorera om man vill.
Re: Linux gcc, slukar programmet resurser?
Det här är inte ++, vanlig object free gcc och direkt länkat mot xlib. Den gör XCloseDisplay samt free på allt dynamiskt minne innan terminering, om detta nu görs normalt. Ibland när något är fel så segfaultar den och vad som då sker med minne och x-resurser vet jag för lite om.
Det som skulle behövas är om t.ex gdb har någon finess för att se om allt verkligen är släppt vid normalt avslut. Hade även varit bra att kunna fånga upp en segfault och hantera den lite snyggare.
Det som skulle behövas är om t.ex gdb har någon finess för att se om allt verkligen är släppt vid normalt avslut. Hade även varit bra att kunna fånga upp en segfault och hantera den lite snyggare.
Re: Linux gcc, slukar programmet resurser?
Det finns väl debug-vertyg/lib typ eletric fence mfl. som kan fånga upp om programmen börja läcka minne, det är liksom ingen nytt i programmerarvärlden...
https://en.wikipedia.org/wiki/Memory_debugger är väl en ingång när man börja leta program/libb som kan underlätta
I top, atop mfl. monitorer (om du kör linux) kan man se om program börja allokera allt mer minne under körningen, så först är att försöka se vilken program som sväller onaturligt i minnesallokering
https://en.wikipedia.org/wiki/Memory_debugger är väl en ingång när man börja leta program/libb som kan underlätta
I top, atop mfl. monitorer (om du kör linux) kan man se om program börja allokera allt mer minne under körningen, så först är att försöka se vilken program som sväller onaturligt i minnesallokering
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
Re: Linux gcc, slukar programmet resurser?
Jag tror nog (utan att veta helt säkert) att alla resurser lämnas tillbaks vid programslut. Det kan naturligtvis finnas en bugg i Linux som gör att det inte blir så. Har du frågat på något lämpligt linuxforum?
Re: Linux gcc, slukar programmet resurser?
Har också svårt att tänka mig att linux skulle misslyckas med detta... - det har liksom varit varumärket för Unix-system i alla åren att klara av sådant till skillnad för windows-baserade system etc. - dvs. användaren kan skita ned för sig själv på sitt lokala konto, men det hotar inte hela systemet - såvida man inte kör som root då eller en kernel-process som inte sköter sig.
Re: Linux gcc, slukar programmet resurser?
Vid segfault är det oftast fel på hårdvara eller drivrutiner.
Jag skulle prova att köra det hemmasnickrade programmet på någon annan maskin en vecka för att utesluta det.
Kör du stable-utgåva av någon känd distribution? Har du någon udda hårdvara eller annat som krävt manuell installation?
Jag skulle prova att köra det hemmasnickrade programmet på någon annan maskin en vecka för att utesluta det.
Kör du stable-utgåva av någon känd distribution? Har du någon udda hårdvara eller annat som krävt manuell installation?
-
- Inlägg: 1397
- Blev medlem: 29 januari 2011, 21:06:30
- Ort: Lapplandet
Re: Linux gcc, slukar programmet resurser?
> Vid segfault är det oftast fel på hårdvara eller drivrutiner.
Helt fel. Den överlägset vanligaste orsaken till segfaults är programmerarmisstag, t.ex. att försöka använda minne efter free(), felaktiga pekare, etc. Kanske blandar du ihop segfaults (userspace-fel) med kernel panics?
> Hur tar jag reda på att det verkligen släpper alla resurser när processen terminerar?
Det sköter kerneln om. Däremot kan du fortfarande drabbas av minnesfragmentering även om minnet frigörs om du gör många små allokeringar.
T.ex om du över tid allokerar totalt 1GB i små 1 kB-delar. Sen när programmet avslutas (eller kraschar) så frigörs allt minne, men största sammanhängande block kan vara väldigt litet.
Helt fel. Den överlägset vanligaste orsaken till segfaults är programmerarmisstag, t.ex. att försöka använda minne efter free(), felaktiga pekare, etc. Kanske blandar du ihop segfaults (userspace-fel) med kernel panics?
> Hur tar jag reda på att det verkligen släpper alla resurser när processen terminerar?
Det sköter kerneln om. Däremot kan du fortfarande drabbas av minnesfragmentering även om minnet frigörs om du gör många små allokeringar.
T.ex om du över tid allokerar totalt 1GB i små 1 kB-delar. Sen när programmet avslutas (eller kraschar) så frigörs allt minne, men största sammanhängande block kan vara väldigt litet.
Re: Linux gcc, slukar programmet resurser?
Tack Mr Andersson.
Jag tänkte helt fel eftersom det lät på första inlägget som hela maskinen stannade och behövde rebootas.
Då ska det ju inte vara något problem att hitta i loggfilerna vilken process som är den skyldige, och sedan gå vidare med debugging av densamma.
Jag tänkte helt fel eftersom det lät på första inlägget som hela maskinen stannade och behövde rebootas.
Då ska det ju inte vara något problem att hitta i loggfilerna vilken process som är den skyldige, och sedan gå vidare med debugging av densamma.
Re: Linux gcc, slukar programmet resurser?
TS: Vad är det för "magiska fenomen" som uppstår? Med en bra buggrapport så är man ju ofta mer än halvvägs till att lösa problemet, så du kanske skulle börja där?
Re: Linux gcc, slukar programmet resurser?
Mr Andersson har ju rätt. Men man kan väl tänka sej att Xservern skulle kunna samla på sej saker.
Exakt vad det skull vara har jag dock väldigt vaga tankar om.
Exakt vad det skull vara har jag dock väldigt vaga tankar om.
Re: Linux gcc, slukar programmet resurser?
Man kan ju dock råka ut för zombieprocesser (defunct) , men i linux ska väl dessa inte allokera systemresurser (som dom gör i windows)
Re: Linux gcc, slukar programmet resurser?
OS-trubbel tar vi inte i den här gruppen. Det verkar finnas ett tydligt samband med mitt hemmagjorda program, så ett verktyg för att upptäcka om det är trasigt är vad som eftersöks.
Det som inträffar är att datorn helt plötsligt blir jättetrög. Nätverket. trådat till en gammal router med ddwrt, går ibland ner. ifconfig och route -n visar OK. Starta om X gör ingen nytta. Kräver reboot. top visar OK. Finns mycket minne bundet i cache, men det kräver väl hyfsat små block, så det ändå kan vara hyperfragmenterat? Hur kollas detta?
Segfaultarna vet jag berott på en dubbellänkad lista som "gått av". Det hittades med gdb, men där kan ju vara mer kvar... Då vore det bra att kunna fånga upp en segfault, försöka spara till en "crashfil" om det går och avsluta snyggt. try/except är bra i ++, men finns massor av sk*t jag absolut inte vill ha.
Projektet börjar så sakteliga att bli moget, men vill vara drägligt säker på att det är fritt från allvarliga fel innan det är dags att lägga ut det för fri nedladdning någonstans. Skall bli intressant att se vad det blir av det, men kanske redan är crap med den dj**la overhead 64-bit skapar...
Det som inträffar är att datorn helt plötsligt blir jättetrög. Nätverket. trådat till en gammal router med ddwrt, går ibland ner. ifconfig och route -n visar OK. Starta om X gör ingen nytta. Kräver reboot. top visar OK. Finns mycket minne bundet i cache, men det kräver väl hyfsat små block, så det ändå kan vara hyperfragmenterat? Hur kollas detta?
Segfaultarna vet jag berott på en dubbellänkad lista som "gått av". Det hittades med gdb, men där kan ju vara mer kvar... Då vore det bra att kunna fånga upp en segfault, försöka spara till en "crashfil" om det går och avsluta snyggt. try/except är bra i ++, men finns massor av sk*t jag absolut inte vill ha.
Projektet börjar så sakteliga att bli moget, men vill vara drägligt säker på att det är fritt från allvarliga fel innan det är dags att lägga ut det för fri nedladdning någonstans. Skall bli intressant att se vad det blir av det, men kanske redan är crap med den dj**la overhead 64-bit skapar...
Re: Linux gcc, slukar programmet resurser?
Det här är nog rätt knepigt!
Normalt kör man sitt program under Valgrind för att avslöja minnesläckor och uppknutna resurser,
men Valgrind tittar inte i X-servern.
Då skulle man behöva köra X-servern under Valgrind. Att ändra sin uppstartskonfiguration så att detta sker känns jobbigt.
Det finns annars en sida här.
https://www.x.org/wiki/Development/Docu ... Debugging/
Men även detta är gissnigsvis jobbigt, så har du inte myckat goda skäl att strula med det eller tycker att det är roligt och spännade, så blir min rekommendation att hellre försöka leva med problemet.
Tråkigt svar men ärligt! Men det är inte osannolikt att X-servern samlar på sig vid t.ex. XLoadFont .
Var inte rädd all lägga ut programmet, skicka bara med en liten varning!
Normalt kör man sitt program under Valgrind för att avslöja minnesläckor och uppknutna resurser,
men Valgrind tittar inte i X-servern.
Då skulle man behöva köra X-servern under Valgrind. Att ändra sin uppstartskonfiguration så att detta sker känns jobbigt.
Det finns annars en sida här.
https://www.x.org/wiki/Development/Docu ... Debugging/
Men även detta är gissnigsvis jobbigt, så har du inte myckat goda skäl att strula med det eller tycker att det är roligt och spännade, så blir min rekommendation att hellre försöka leva med problemet.
Tråkigt svar men ärligt! Men det är inte osannolikt att X-servern samlar på sig vid t.ex. XLoadFont .
Var inte rädd all lägga ut programmet, skicka bara med en liten varning!
Re: Linux gcc, slukar programmet resurser?
Precis, valgrinds memcheck är nog verktyget du efterfrågar. Superbra för att hitta "oåtkomligt" minne (d.v.s. minnesläckor) t.ex. i det egna programmet.
Jag har för övrigt sett ett liknande fenomen på en burk med för lite minne för att bygga openoffice (och ingen swap). Efter misslyckat bygge (vet ej om det var gcc som avslutade p.g.a. Out of memory eller om bygget blev dödat av kärnans OOM-killer) så blev datorn tokseg - t.o.m. muspekaren i X uppdaterades väl 1 gång per sekund eller så. Jag grävde aldrig vidare i problemet tyvärr...
Jag har för övrigt sett ett liknande fenomen på en burk med för lite minne för att bygga openoffice (och ingen swap). Efter misslyckat bygge (vet ej om det var gcc som avslutade p.g.a. Out of memory eller om bygget blev dödat av kärnans OOM-killer) så blev datorn tokseg - t.o.m. muspekaren i X uppdaterades väl 1 gång per sekund eller så. Jag grävde aldrig vidare i problemet tyvärr...