Heap management

Apostolos Manolitzas apostolix at gmail.com
Fri Jun 2 22:59:33 EEST 2006


On 6/2/06, P. Christeas <p_christ at hol.gr> wrote:
> On Friday 02 June 2006 9:21 pm, Apostolos Manolitzas wrote:
> > παρατηρώ το εξής φαινόμενο σε ένα σύστημα που τρέχει kernel 2.4.12
> > Έχω μια σερβερ εφαρμογή που δέχεται commands από sockets οπότε με τα
> > commands αυτά γίνονται αρκετά new() της τάξης των 10^6 αλλά με μεγέθη
> > των Objects αρκετά μικρά 10-100 bytes.
> > Στην συνέχεια έρχονται οι αντίστοιχες εντολές για την απομάκρυνση
> > αυτών των objects με τα αντίστοιχα delete. Έχω μετρήσει το πλήθος των
> > new και ειναι το ίδιο με αυτό των delete δηλαδή ξέρω σίγουρα οτι δεν
> > έχω Leak, ή αν έχω δεν το βρίσκω ή είναι πολύ μικρό.
> >
> > Το πρόβλημα μου είναι το εξής στην αρχή το πρόγραμμα έχει μέγεθος 3Μ
> > όταν κάνω όλα τα new το μέγεθος εκτοξεύεται στα 27Μ που το θεωρώ
> > φυσιολογικό γιατί μετράω όλα τα new και είναι πάρα πολλά. Το μεγάλο
> > μου ερώτημα είναι γιατί όταν κάνω τα αντίστοιχα delete δεν πέφτει πάλι
> > στα 3Μ! ή έστω εκεί κοντά. Δηλαδή η μνήμη διατηρείται στα 25Μ και όταν
> > εφαρμόσω πάλι την ίδια ακολουθία εντολών (new - delete) η μνήμη
> > ανεβαίνει στα 30Μ.
> >
> > Διάβασα για πιθανόν caching που κάνει η μνήμη, οπότε φτιάχνω ένα
> > προγραμματάκι που κάνει malloc όση ελεύθερη έχει απομείνει ώστε να το
> > στρεσάρω όσο μπορώ, μπας και την δώσει την άτιμη. Το αποτέλεσμα είναι
> > οτι δεν την δίνει αυτή την μνήμη.
> >
>
> Προσωπικά, γιατί ακούει και ο Σαύρας..
>
> Είναι λογικό αυτό. Όταν ασχολιόμουν κι εγώ με το θέμα, αν θυμάμαι καλά, είχα
> διαβάσει αυτό:
> το kernel όταν βλέπει οτι μία εφαρμογή θέλει μνήμη, της δίνει pages. Αυτά δεν
> είναι όσο ζητάει η εφαρμογή, είναι παραπάνω. Δηλ. πιό 'χοντρά'. Μετά, το
> malloc,  κάνει δική του διαχείριση, μέσα στην εφαρμογή.
> Το αποτέλεσμα είναι τα pages να ανεβαίνουν. Μπορεί να δείς μία εφαρμογή να
> έχει 100Μ, αλλά η περιοχή 20-80 να είναι "free". Το malloc μπορεί, μετά, να
> αποφασίσει να ξαναδώσει χώρο στην 20-80 π.χ..
> Μπορεί κιόλας ο kernel να μήν έχει κάν χώρο για όλα τα pages. Γι' αυτό και
> μπορεί να δείς σε ένα μηχάνημα με 256 ram + 512 swap συνολικά allocated 1G
> pages.
> Τα pages ελευθερώνονται αρκετά αργότερα.
> Σκέψου μόνο οτι η διευθυνσιοδότηση της "μνήμης" της εφαρμογής είναι συνεχής.
> Αυτά ξέρω.
>
>

Δηλαδή είναι λογικό να ζητάει άλλη εφαρμογή μνήμη και να  μην του την
δίνει, ενώ στην πραγματικότητα είναι cached ή σε unused state?
Δηλαδή η μνήμη παραμένει defragmented κατά κάποιο τρόπο; (ελπίζω να
μην λέω ανοησίες)




More information about the Linux-greek-users mailing list