Avatar billede elster Nybegynder
12. maj 2003 - 00:17 Der er 20 kommentarer og
1 løsning

Antal threads pr. process

Jeg har netop installeret Redhat 8.0 på en maskine. Her skal jeg køre en server applikation (programmeret i Java), der skal kunne håndtere mindst 3000 samtidige threads.

På Windows NT Server, virker det helt perfekt, og programmet kan uden problemer køre med langt over 3000 samtidige threads.

Men på RedHat kan jeg ikke komme op på mere end omkring 2100 samtidige threads i samme program. Det ser ud til at den løber ind i en eller anden øvre grænse angående stack size per process/program. For hvis jeg angiver at Java VM kun skal benytte en stack size på 256KB pr. thread (mod 512KB som default), så kan jeg lave ca. dobbelt så mange threads. Men jeg vil naturligvis helst ikke lave den tildelte stack size pr. thread mindre end default, da dette vil øge risikoen for Stack Overflows.

Det er heller ikke fordi computeren mangler resourcer - da jeg tested det, var der hele tiden mindst 800MB ram ledig, og jeg sagtens kan starte flere instanser af programmet samtidig, hvor hver instans fint køre med de 2100 samtidige threads. Men det skulle jo gerne være ét program der kan have mindst 3000 threads.

Kan det passe at der er en sådan øvre grænse et eller andet sted? Og hvordan kan denne fjernes, så jeg kan lave flere threads pr. program/process.

Håber nogen kan hjælpe!
Avatar billede dank Nybegynder
12. maj 2003 - 00:44 #1
du skal nok i noget kenel kompilering, hvilket jeg ikke kender til på Red Hat.

Men kig her: http://linuxperf.nl.linux.org/general/kerneltuning.html

Søg på "threads" så finder du det :)
Avatar billede arne_v Ekspert
12. maj 2003 - 07:54 #2
Jeg tror dank har ret: custom kernel build.

Men noget helt andet (som jeg ved mere om) !

3000+ samtidige threads giver en meget dårlig udnyttelse af CPU.

>256KB stack per thread lyder faktisk voldsomt.

Har du overvejet at redesigne den server app lidt ?

Du kan sagtens få den til at køre.

Men jeg tror at den kunen forbedres en hel del !
Avatar billede elster Nybegynder
12. maj 2003 - 11:22 #3
dank > Den kernel version jeg har er den der kommer med RedHat 8.0, som vidst nok er version 2.4.18-19.8.0. I den side du sendte står der ikke noget angående kernel 2.4x.

Jeg læste et sted at man kunne rette i filen "/proc/sys/kernel/threads-max", men denne står allerede til 14336.

Som sagt, hvis jeg nedsætter størrelsen pr. thread stack til 256K, så kan jeg lave ca. dobbelt så mange threads. Så det ser ud som om den løber ind i en øvre grænse når størrelsen på alle thread stacks tilsammen er omkring 1GB, per program. En thread stack bruger virtual memory (ikke ram), så jeg skulle mene at det er address space jeg løber tør for..

Så jeg tror spørgsmålet må være:
Hvordan kan kan jeg forøge den max tilladte mængde af virtual memory/address space en applikation/process kan bruge?
Avatar billede arne_v Ekspert
12. maj 2003 - 11:29 #4
Det er formentlig stadig en kernel rebuild der skal til.

Nu kender jeg ikke Linux virtual address space, men hvis det er 32 bit flat,
så kan du jo snart komme i problemer, da 4 GB ihvertfald er absolut max.
og hvis f.eks. kun halvdelen kan bruges til stack er 2 GB max. og hvis
halvdelen er til system og kun halvdelen af resten er til stack, så er
det 1 GB.

Husk iøvrigt at roterende virtuelt hukommelse er meget langsomt !
Avatar billede elster Nybegynder
12. maj 2003 - 11:40 #5
arne_v > det er et netværks applikation der kommunikere med klienter; derfor bliver vi nødt til som minimum at have én thread pr. klient. På NT køre den fint med omkring 2500-3000 samtidige klienter, og et CPU forbrug på omkring 20-30%.

Jeg ved at vi kunne benytte java's nye non-blocking IO, for at servicere flere klienter pr. thread, men det ville tage utrolig lang tid at omskrive hele applikationen til dette. Efter tests med non-blocking IO, på windows stødte jeg også på et par fatale bugs, der ikke er rettet endnu.
Avatar billede elster Nybegynder
12. maj 2003 - 11:48 #6
arne_v > Ok, ved du eventuelt hvordan jeg, som en start, bare finder ud af hvor meget virtual address space der kan benyttes per program.
Avatar billede arne_v Ekspert
12. maj 2003 - 12:50 #7
Jeg kender ikke Linux godt nok til at kunne sige det.
Avatar billede arne_v Ekspert
12. maj 2003 - 12:50 #8
Men ser følgende link ikke spændende ud:
  http://www.mail-archive.com/java-linux@java.blackdown.org/msg15250.html
?
Avatar billede elster Nybegynder
12. maj 2003 - 13:20 #9
arne_v > Jep! Dette er lige præcis også mit problem :)
Jeg prøver lige at kigge nærmere på nendenstående som de skriver:

> $ grep CONFIG_.GB /boot/config-2.4.18-14
> # CONFIG_3GB is not set
> # CONFIG_2GB is not set
> CONFIG_1GB=y

Jeg håber bare ikke at det er nødvendigt at rebuilde kernel; har på fornemmelsen at dette ville gå meget galt..

Jeg vender tilbage når jeg har kigget nærmere på det..
Avatar billede lap Nybegynder
12. maj 2003 - 18:29 #10
Hvis maskinen kun er udstyret med 1CPU installeres kerne.... - hvis der er flere installeres kerne-smp... - som standard understøtter 2Gb - og kerne-enterprise... understøtter > 4Gb.

Hvilken kerne er installeret? (uname -a)

Problemet kan alene være shared_memory, som kan rettes on-the-fly - og under boot vha. /etc/sysctl.conf

kernel.shmmax = 1999999999
Avatar billede arne_v Ekspert
12. maj 2003 - 18:43 #11
Thread stack-space er da ikke shared memory er det ????
Avatar billede lap Nybegynder
12. maj 2003 - 18:46 #12
Normalt nej, så derfor også første forslag med en "større" færdigproduceret kerne.

Og problemet kunne være shmmax (uden at vide ret meget om java)?
Avatar billede elster Nybegynder
12. maj 2003 - 19:42 #13
lap > "uname -a" viser at det er en kerne-smp (maskinen er 2CPU).

I /etc/sysctl.conf har shared memory følgende værdi:
kernel.shmmax = 33554432

Jeg prøver lige at sætte denne op til det dobbelte, og så se hvad der sker...
Avatar billede elster Nybegynder
12. maj 2003 - 21:21 #14
lap > kernel.shmmax kan ikke sættes til en højere værdi end 33554432 (som den allerede står til). Applikationen "Kernel Tuning" der følger med RedHat, gør det muligt editere værdierne i /etc/sysctl.conf via en grafisk brugergrænseflade. Og den tillader altså ikke at kernel.shmmax bliver sat til mere end 33554432.
Avatar billede arne_v Ekspert
12. maj 2003 - 21:24 #15
Har du prøvet med CONFIG_2GB ?
Avatar billede elster Nybegynder
12. maj 2003 - 21:56 #16
arne_v > I /boot/config-2.4.18-14 er min setting også "CONFIG_1GB=y". Jeg ville meget gerne blot ændre dette til "CONFIG_2GB=y". For det er helt sikkert her mit problem ligger. Men for at dette får nogen som helst virkning, skal der laves en komplet rebuild af kernel. Se:
http://www.mail-archive.com/java-linux@java.blackdown.org/msg15251.html

Jeg har læst lidt om hvordan man rebuilder sin kernel på redhat.com, men det ser mildest talt ikke særlig nemt ud.. Og jeg tror ikke at dette er noget jeg vil begive mig ud i lige med det samme. Til at starte med vil jeg blot prøve at reducere stack size pr. thread til 256K, og se om det så ikke går an.

Du er meget velkommen til at "svare" så du kan få dine point, og vi kan få lukket spørgsmålet. Der kan jo gå lang tid før jeg får taget mig sammen, og forsøger en kernel rebuild. :)
Avatar billede arne_v Ekspert
12. maj 2003 - 22:18 #17
ok
Avatar billede dank Nybegynder
12. maj 2003 - 23:05 #18
og så er vi tilbage til start :?
Avatar billede elster Nybegynder
13. maj 2003 - 09:30 #19
dank > Øøhh, nope. Nu ved jeg hvad der skal ændres for at løse problemet!!! Hvad mere kan man forlange? Linket du sendte fortalte ikke noget om mit problem angående virtual address space (CONFIG_1GB, CONFIG_2GB). Om jeg rebuilder i dag eller om en måned kan ligsom ikke være dit problem.
Avatar billede dank Nybegynder
13. maj 2003 - 11:55 #20
argh. jeg tror du misforstår, men never mind.. :|
Avatar billede elster Nybegynder
13. maj 2003 - 12:54 #21
Det gjorde jeg sikkert. sorry..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester