DEBAG@t-online.de (Thomas Dubiel) schrieb:
ich hab da mal in der liste gelesen, daß jemand mit Oracle beschäftigt war - ich denke mal, daß es sowas auch da geben muß
Ja, Oracle verwendet Shared Memory (zur Kommunikation zwischen den einzelnen Server-Prozessen). Allerdings reichten fuer 8.1.5 (a.k.a. 8i) die Standardeinstellungen im 2.2er Kernel.
ich kann mir mittels ipcs den shared memory anzeigen lassen. wenn ich das mache, wird mir nichts angezeigt bzw. ist leer.
wenn ich irgend ein Programm aufrufe, welches mit Informix arbeitet, kommt immer die Meldung, daß kein shared memory für die entsprechende Instanz freigegeben wurde.
Wie kann ich also der Instanz (Informixserver) shared memory freigeben bzw. zuweisen?
Thomas
Hi,
Warum soll Linux denn keine Sempahore unterstuetzen ? Soweit ich weisz, wird auch all das unterstuetzt, worueber man mittels IPCS Informationen erhaelt. In C gibt es zur Nutzung von shared memory die Operationen shmget , shmat , shmctl und das funktioniert auch praechtig. Sehr aehnlich sieht das fuer Semaphore aus. Aber kann man auf Shell-Ebene shared-memory allokieren ?!
Ciao, Matthias.
-+------------------------------------------------ | Matthias Fichtner | Dresden University of Technology | Department of Computer Sience | Germany | mf14@inf.tu-dresden.de -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
Warum soll Linux denn keine Sempahore unterstuetzen ? Soweit ich weisz, wird auch all das unterstuetzt, worueber man mittels IPCS Informationen erhaelt. In C gibt es zur Nutzung von shared memory die Operationen shmget , shmat , shmctl und das funktioniert auch praechtig. Sehr aehnlich sieht das fuer Semaphore aus. Aber kann man auf Shell-Ebene shared-memory allokieren ?!
Das ist richtig. Linux unterstützt Semaphore und Shared Memory. Die Operationen shmget, shmat und shmctr sind auch dafür gedacht in den entspr. Bibliotheken. Ich will aber für eine fertige Applikation - den Informix-Server - shared memory bereitstellen und dazu muß ich die irgendwie definieren bzw. den shared memory konfigurieren.
Ich habe mittlerweile rausbekommen, daß man dazu einige Einstellungen im Kernel machen muß und anschließend den Kernel neu übersetzen. Ich weiß nur nicht wie und wo.
Danke
CU Thomas
shared memory bereitstellen und dazu muß ich die irgendwie definieren bzw. den shared memory konfigurieren.
Du als Anwender solltest damit nix zu tun haben. Eine Anwendung besorgt sich Speicher und deklariert ihn als shared memory. Was genau willst Du denn am "shared memory konfigurieren"? Groesse? Lage?
Ich habe mittlerweile rausbekommen, daß man dazu einige Einstellungen im Kernel machen muß und anschließend den Kernel neu übersetzen. Ich weiß nur nicht wie und wo.
Welche Einstellungen? Und wieso soll der Kernel wissen, wann und wie eine Anwendung irgendwann vielleicht mal mit shared memory umgehen will? Es gibt einige definierte Schnittstellen, richtig, und wenn diese von den Anwendungen korrekt genutzt werden, sollte es i.Allg. keine Probleme geben. Wenn Du unbedingt am Kernel rumschrauben willst, kannst Du ja mal einen Blick in linux/mm/mmap.c, linux/include/linux/shm.h, linux/include/asm/mman.h oder linux/include/linux/mm.h werfen, aber da hab ich nix gefunden, was man einstellen koennte. Aber vielleicht wirst Du ja fuendig... :) Shared memory is nix besonderes und "schon eingebaut". Der Kernel kennt ihn durchaus und stellt ihn auch gerne bereit, wenn jemand danach fragt.
Koennte es sein, dass Du zu wenig physischen Speicher (RAM) eingebaut hast? Grosse Datenbanken brauchen meist recht viel davon, glaub ich. Dein "shared-memory-Problem" ist vielleicht nur eine Folge davon. Diese Vermutung is aber nur n "Schuss ins Blaue" ;)
jens
On Thu, Feb 24, 2000 at 04:23:58PM +0100, Thomas Dubiel wrote:
Das ist richtig. Linux unterstützt Semaphore und Shared Memory. Die
Das stimmt. Die entsprechenden funktionen sind da. Meiner Meinung nach habe Semaphore un ShM nur insofern etwas miteinander zu tun, als das Semaphore mitteln ShM implementiert worden sind, oder? Wenn man Semaphore nutzen will, benötigt man nur das Zeug auf <sys/sem.h>, alo sem_get usw. Um den ShM im Hintergrund bracht man sich dabei nicht zu koemmern - solange er nicht entweder zu klein ist oder die Zahl der Segmente zu gering ist.
Operationen shmget, shmat und shmctr sind auch dafür gedacht in den entspr.
Also rein ShM.
Bibliotheken. Ich will aber für eine fertige Applikation - den Informix-Server - shared memory bereitstellen und dazu muß ich die irgendwie definieren bzw. den shared memory konfigurieren.
Ich habe mittlerweile rausbekommen, daß man dazu einige Einstellungen im Kernel machen muß und anschließend den Kernel neu übersetzen. Ich weiß nur nicht wie und wo.
Bei einem 2.2er Kern kann man das zu Laufzeit einstellen. Ich habe kein laufendes 2.2er zur Hand, aber in etwa so:
echo "4294967295" > /proc/sys/kernel/shmmax
Sonst mal im Kernelsource in .../Documentation/sysctl/* nachlesen oder auf www.deja.com nach "linux SHMMAX oracle" suchen.
Reinhard
Wenn man Semaphore nutzen will, benötigt man nur das Zeug auf <sys/sem.h>, alo sem_get usw. Um den ShM im Hintergrund bracht man sich dabei nicht zu koemmern - solange er nicht entweder zu klein ist oder die Zahl der Segmente zu gering ist.
Das könnte (oder ist mit Sicherheit) der Fall sein.
Ich habe mittlerweile rausbekommen, daß man dazu einige Einstellungen im Kernel machen muß und anschließend den Kernel neu übersetzen. Ich weiß
nur nicht
wie und wo.
Bei einem 2.2er Kern kann man das zu Laufzeit einstellen. Ich habe kein laufendes 2.2er zur Hand, aber in etwa so:
echo "4294967295" > /proc/sys/kernel/shmmax
ich gehe davon aus daß dieser Ausdruck folgendes bewirkt: sage "Anzahl Pages" an /proc/sys/kernel/<Parameter>
Die Frage ist ob der Wert nach Echo Pages (2K) oder reine Kilobyte sind? Oder was hat dieser Ausdruck sonst zu bedeuten?
Sonst mal im Kernelsource in .../Documentation/sysctl/* nachlesen oder auf www.deja.com nach "linux SHMMAX oracle" suchen.
Habe ich gemacht und habe die anderen Parameter gefunden Danke.
CU Thomas
lug-dd@mailman.schlittermann.de