Hallo Leute
ich habe nen Linux root. der sollte fast immer online sein nu habe ich das Problem das der cache immer relativ bald (3wochen) voll wird. (geht nachrestart ja wieder weg) aber da laufen server usw. drauf. ich wollte mal wissen ob es vill so eine Funktion gibt wie cages leeren oder so
mfg
Jacky
Linux 15.036 Themen, 107.107 Beiträge
Also Du hast einen root-Server und dort läuft der Cache voll.
Meines Wissens läuft damit /tmp voll und diese Einträge kannst Du löschen.
Wenn meine Annahme soweit richtig ist, dann kannst Du einen cron-job einrichten, der nach Deiner Zeitvorgabe den Befehl zum Löschen des Inhaltes von /tmp ausführt.
Als Skript wird z.B. folgendes angelegt (ungetestet !):
--------------------------------------------------------------------------
#! /bin/sh
# Wo auch immer Dein /tmp-Verzeichnis steckt, musst Du natürlich hier drunter eintragen
rm /srv/www/htdocs/tmp/*
exit 0
---------------------------------------------------------------------------
Diese Datei ausführbar machen:
sudo chmod +x /Pfad/zum/oben/angelegten/Skript.sh
Editieren kann man die cronjobs mit
crontab -e
Die Editierung muss als ein Benutzer ausgeführt werden, der Schreibrechte
auf dem Tmp-Verzeichnis hat. Der Eintrag in die crontab kann z.B. so
aussehen:
0 0 * * * /Pfad/zum/oben/angelegten/Skript.sh
(löscht die Dateien zur Minute 0, Stunde 0, aber *** bedeutet beliebiger Tag, Monat,
Jahr). Also zum Bleistift: * */3 * * /Pfad/zum/oben/angelegten/Skript.sh startet das Script alle drei Stunden und löscht den Inhalt des /tmp-Ordners.
Im Fall von SUSE wird die das Script im Verzeichnis /etc/cron.hourly abgelegt und hier stündlich ausgeführt.
Grüße, tuxus
Was meist du mit Cache ?
Wenn der RAM Speicher volläuft, dann kann ein Programmierfehler vorliegen.
So einen Fehler nennt man Speicherleck.
Programme reservieren Speicher auf dem Heap (spezieller Speicherort im RAM) und geben ihn durch einen Programmierfehler nicht wieder frei. Und irgendwann ist der Speicher voll und die Auslagerungspartition läuft auch voll.
"ich wollte mal wissen ob es vill so eine Funktion gibt wie cages leeren oder so"
Ja so eine Funktionion gibt es und jeder Programmierer sollte sie auch kennen.
Bei C Programmen heißt sie free () ( malloc() reserviert den Speicher auf dem Heap, free() gibt den Speicher wieder frei)
Bei C++ Programmen heißt diese Funktion delete().
Solche Programmierfehler sind schwer zu finden und man nennt sie auch Laufzeitfehler, weil sie sich erst im Dauerbetrieb bemerkbar machen (und spielen im Desktopbereich keine so große Rolle, weil ein Desktoprechner irgendwann wieder ausgeschaltet wird).
Was sagt der Befehl free oder free -m ?
Was meinst du genau mit "Cache"? Linux speichert viele Daten, welche oft abgerufen werden im RAM, um die verhältnismässig langsamen Festplattenzugriffe zu reduzieren.
So also das mit tmp hat leider nicht geklappt.
also das mit der Programmiersprach ist ja ganz schön aber ich habe ja keine eigenen Programm drauf dass ich selber geschrieben habe oder nicht bekannt (fast ohne Bugs) währe. Ja mit Cache meine ich den Ram der immer voller geht je öfter ich drauf gehe (per vnc) liegt es vill daran, gibts da ne Möglichkeit?
erstmal danke schonmal für die antworten
Das ist bei Linux völlig normal. Der RAM wird komplett genutzt. Ein großer Teil wird für das Caching von Festplattendaten genutzt, damit ein zweiter Zugriff auf die Festplatte nicht notwendig ist.
Du kannst dann noch etwas mehr Speicher einbauen.
Kontrollier ab und zu mit free oder free -m ob die Auslagerungspartition viel genutzt wird. Sollte das der Fall sein,dann kannst du etwas mehr Speicher einbauen.
Mit mehr RAM-Speicher kann der Rechner etwas schneller werden , da die Anzahl der Festplattenzugriffe minimiert wird.
Ja ok Caching schön und gut aber wenn dann alles nciht mehr läuft weil Ram voll und Swap nicht benutzt wird was dann? der ram wird gefüllt aber nicht mehr geleert :( hier mal nen bild wie das aussieht.
http://img231.imageshack.us/img231/6866/cachesvv0.jpg
so und wie soll ich den free befehl anwenden?
mfg
Jacky
Hast du nun effektiv ein Problem mit der Perfomance deines Systems oder störst du dich lediglich daran, dass Linux im Gegensatz zu Windows nicht den Flaschenhals Festplatte durch Swapping noch enger macht?
So wie ich dein Bild lese, sind 1.7GB frei, 5.7GB sind Cache. Bei 7.9GB sind also 0.5GB durch Programme belegt.
Geh mal auf die Konsole und tipp dort free (oder free -m für besser lesbare Darstellung) ein. Swap ist massiv langsamer als RAM und sollte daher vom System nur im Notfall angerührt werden.
Hier mal ein Beispiel:
$ free -m
total used free shared buffers cached
Mem: 1994 1940 53 0 124 1189
-/+ buffers/cache: 626 1368
Swap: 3906 0 3906
von 2GB RAM sind nur noch 53MB frei, Swap wird nicht benutzt. Aaaaber: Von den belegten 2GB sind 1.3GB Cache und Puffer, also Daten, welche nur zwischengespeichert werden. 600MB sind effektiv durch Programme belegt.
Was passiert nun, wenn ein neues Programm gestartet wird, das 100MB RAM belegen will? Nun, da werden einfach die ältesten Daten aus der Kategorie "cached" gelöscht, schon steht der Platz dafür zur Verfügung.
Wie schon oben angetönt: Die exzessive Verwendung von RAM als Cache für die Festplatten beschleunigt erneute Lesezugriffe auf Dateien massiv. RAM ist etwa 1000x schneller als die Platte. Und das Speichermanagement von Linux ist relativ clever durchdacht.
Wie mic schon sagte, interpretierst Du das falsch. Dass Linux den RAM voll ausnutzt, führt zu einem Geschwindigkeitsgewinn des Systems, da Daten nicht erneut von der Festplatte geholt werden müssen, sondern sofort zur Verfügung stehen.
Es ist gut, dass Swap nicht genutzt wird. Das sollte nur im Ausnahmefall so sein, da es doch eine Auslagerungsdatei auf der Festplatte ist. Bei 8GB ! RAM wird es, soweit ich das kenne, wohl nie dazu kommen. :)
Was heißt "alles läuft nicht mehr"? Gibt es Fehlermeldungen?
Gruß.
Ok erstmal Danke
dies ist ein effektives Problem, selbst wenn ich mich auslogge und dannah wieder einlogge hat er doppelt soviel an Arbeitspeicher mit Caches belegt selten mit sonstigen Sachen. Die 1.7Gb ram frei sind gerade noch so da weil ich erst letztens nen restart machen konnte da alle Server leer waren normal habe ich max. 350mb frei (von 8GB) wenn ich ausgeloggt bin ändert sich daran nichts :( aber das der voll geht würde mich ja dann nicht stören wenn er nicht durch die fast vollständige ausnutzung des Rams langsamer wird. (350mb frei (7GB für caches)) da hat er nicht mehr viel platz für sonstiges (Programme usw.) deshalb ist es dann bald soweit das ich nichts mehr wirklich machen kann (selbst das aufrufen vom Konquerror dauuert dann Ewigkeiten, neuen server online bringen sollte ich dann lassen sonst bin ich damit 20min beschäftigt). Kann ich die gecachten Daten nicht löschen wenn ich mal was frei haben will (wenn ich weis das ich erstmal nichts mache o.ä.)?
Ok das mit dem free in der Console hatte ich nur als erstes falsch verstanden und deshalb falsch angewendet und deshalb nochmal nachgefragt :-)
mfg
Jacy
Das könnte ein Programmierfehler sein, ein Speicherleck. Wobei ich nicht weiß ob durch ein Speicherleck in einem Programm der Cache kleiner wird. Hast du die 64 bit Version des Linuxkernels installiert oder die 32 bit Version ?
Wenn die 32 bit Version installiert ist, dann mußt du eventuell den Linuxkernel selbst übersetzen und die High Memory Option auf 4 GByte einstellen.
Der Linuxkernel kann bis zu 64 GByte RAM verwalten, auch die 32 bit Version. Bei der 32 bit Version wird der Speicher in einen High Memory Teil und einen Low Memory Teil aufgeteilt. Die High Memory Option kann man auf Flat, 4 GByte und 64 GByte einstellen, je nachdem wieviel RAM-Speicher im Rechner ist.
Der Vorteil der 64 bit Version ist , das kein Unterschied mehr zwischen High Memory und Low Memory gemacht wird, aber die 32 bit Version kann auch bis zu 64 GByte RAM verwalten.
Hast du die 32 bit Version oder die 64 bit Version installiert und welche Distribution ?
Vielleicht ist wirklich irgendwo ein Speicherleck programmiert.
Ist Suse Linux 10.3 32Bit KDE hmm... wenn du mir sagst wo ich das mit dem Memory (ram) einstellen kann währe ich dir sehr dankbar weil das echt nervig sein kann :-)
Die Standardkernel sind wahrscheinlich auf "off" bei der High Memory Support Option eingestellt sein.
Du mußt eben einen eigenen Kernel übersetzen. Da ist aber nicht nur diese eine Option einzustellen, sondern alles. Angefangen mit dem Prozessor-Type , alle Gerätetreiber und eben diese High Memory Option.
Du mußt den kernel-source??? installleren, das Programmierwerkzeug make, den Compiler gcc und natürlich binutils. Die 32 bit Version kann auf jeden Fall diese 8 GByte RAM verwalten. Ich weiß nicht wie das programmiert ist. Ich nehme mal an das aus zwei 32 bit CPU Registern eine 64 bit RAM Adresse berechnet wird.
Dann installierst du noch die ncurses-dev Entwicklungsbibliothek. Ich weiß nicht welche Version bei SUSE dabei ist.
Du gehst in /usr/src/linux-source??? rein und gibst den Befehl "make menuconfig" ein.
Danach wird ein Dialog geöffnet , in dem du die verschiedenen Kerneloptionen und Gerätetreiber auswählen kannst.
Alle Treiber die du für die / Partition brauchst müssen monolitisch in den Kernel bzImage kompiliert werden und Treiber für Sound und USB kannst du als Modul installieren.
Wenn du fertig bist mit der Konfiguration speicherst du die Konfiguration in der Datei .config ab, gehst aus dem Dialog raus und gibst nacheinander folgende Befehle in der Konsole ein:
make
make modules
make modules_install
oder alles in eine Befehlszeile ein:
"make && make modules && make modules_install"
Ist eigentlich ganz einfach. Wichtige Optionen sind hier noch mal in Deutsch erklärt:
http://de.gentoo-wiki.com/Kernel_manuell_kompilieren/x86_2.6.22-gentoo#Processor_type_and_features
http://de.gentoo-wiki.com/Kernel_manuell_kompilieren
Den Standardkernel läßt du für den Notfall installiert.
Der übersetzte Betriebsystemkern ist bei der 32 bit Architektur in
/usr/src/linux-source-2.6.18/arch/i386/boot$ ls -l
insgesamt 3460
-rwxr-xr-x 1 root root 512 2008-06-09 16:04 bootsect
-rw-r--r-- 1 root root 1580 2008-06-09 16:04 bootsect.o
-rw-r--r-- 1 root root 2156 2006-09-20 05:42 bootsect.S
-rw-r--r-- 1 root root 1697539 2008-06-09 16:05 bzImage
drwxr-xr-x 2 root root 4096 2008-06-09 16:05 compressed
-rw-r--r-- 1 root root 6124 2006-09-20 05:42 edd.S
-rw-r--r-- 1 root root 1413 2006-09-20 05:42 install.sh
-rw-r--r-- 1 root root 4868 2006-09-20 05:42 Makefile
-rw-r--r-- 1 root root 330 2006-09-20 05:42 mtools.conf.in
-rwxr-xr-x 1 root root 6839 2008-06-09 16:04 setup
-rw-r--r-- 1 root root 14320 2008-06-09 16:04 setup.o
-rw-r--r-- 1 root root 26106 2006-09-20 05:42 setup.S
drwxr-xr-x 2 root root 4096 2008-06-09 16:05 tools
-rw-r--r-- 1 root root 40974 2006-09-20 05:42 video.S
-rwxr-xr-x 1 root root 1689859 2008-06-09 16:05 vmlinux.bin
und heißt bzImage.
Du kannst diese Datei nach /boot kopieren und in vmlinuz-Versionsoundso umbennen.
Die Module werden in /lib/modules/kernel??? mit dem Befehl "make modules_install" installiert.
Bei meinem Debian gibt es ein Script update-grub welches die Konfigurationsdatei /boot/grub/menu.lst automatisch aktualisiert. Bei SUSE weiß ich nicht Bescheid, aber du mußt diese Datei für grub aktualisieren.
Der nachfolgende Text ist eine Kopie von der Hilfe aus dem Dialog von der Kernelkonfiguration bezüglich High Memory Support :
CONFIG_NOHIGHMEM: │
│ │
│ Linux can use up to 64 Gigabytes of physical memory on x86 systems. │
│ However, the address space of 32-bit x86 processors is only 4 │
│ Gigabytes large. That means that, if you have a large amount of │
│ physical memory, not all of it can be "permanently mapped" by the │
│ kernel. The physical memory that's not permanently mapped is called │
│ "high memory". │
│ │
│ If you are compiling a kernel which will never run on a machine with │
│ more than 1 Gigabyte total physical RAM, answer "off" here (default │
│ choice and suitable for most users). This will result in a "3GB/1GB" │
│ split: 3GB are mapped so that each process sees a 3GB virtual memory │
│ space and the remaining part of the 4GB virtual memory space is used │
│ by the kernel to permanently map as much physical memory as │
│ possible. │
│ │
│ If the machine has between 1 and 4 Gigabytes physical RAM, then │
│ answer "4GB" here. │
│ │
│ If more than 4 Gigabytes is used then answer "64GB" here. This │
│ selection turns Intel PAE (Physical Address Extension) mode on. │
│ PAE implements 3-level paging on IA32 processors. PAE is fully │
│ supported by Linux, PAE mode is implemented on all recent Intel │
│ processors (Pentium Pro and better). NOTE: If you say "64GB" here, │
│ then the kernel will not boot on CPUs that don't support PAE!
│
│ The actual amount of total physical memory will either be │
│ auto detected or can be forced by using a kernel command line option │
│ such as "mem=256M". (Try "man bootparam" or see the documentation of │
│ your boot loader (lilo or loadlin) about how to pass options to the │
│ kernel at boot time.) │
│ │
│ If unsure, say "off".
PS: Bei der 64 bit Version des Linuxkernels ( AMD64 Architektur) wird kein Unterschied zwischen dem High Memory und dem Low Memory gemacht.
Du mußt diese 32 bit Version nur installieren , wenn du noch 32 bit Programme nutzen willst für die es keine 64 bit Version gibt. Das hängt mit der Registerbreite der Bibliotheken zusammen.