Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Indy TCP Server-Client Sorularım
#21
Indy için yukarıda verdiğim forum linkindeki konuda bir sonuca varıldı.
Özetle Client sayınızı az tutun veya proje ayarlarında thread ler için stack size değerleri ile düzenleme yapın. Indy bu şekilde (çok fazla client bağlanacak gibi)tasarlanmadı şeklinde bir öneri yapıldı.
Son aldığım cevabın orijinal halinin tamamı aşağıdadır.

"1500 *simultaneous* clients? Because that would mean your process is running 1500 concurrent threads (1 thread per client), which is likely to take up way too much memory. The default thread stack size is 1-4MB, depending on project settings, so 1500 simultaneous clients would be using 1.5-6GB of memory. Indy is not designed for that kind of load. You would need to reduce the number of simultaneous clients, or lower the default stack size. But, on Windows at least, you really need to use Overlapped I/O or I/O Completion Ports to handle that kind of load efficiently, and that is not supported by Indy at this time."
PostgreSQL - Linux - Delphi, Poliüretan
WWW
Cevapla
#22
(22-04-2020, Saat: 09:04)3ddark Adlı Kullanıcıdan Alıntı: Indy için yukarıda verdiğim forum linkindeki konuda bir sonuca varıldı.
Özetle Client sayınızı az tutun veya proje ayarlarında thread ler için stack size değerleri ile düzenleme yapın. Indy bu şekilde (çok fazla client bağlanacak gibi)tasarlanmadı şeklinde bir öneri yapıldı.
Son aldığım cevabın orijinal halinin tamamı aşağıdadır.

"1500 *simultaneous* clients? Because that would mean your process is running 1500 concurrent threads (1 thread per client), which is likely to take up way too much memory. The default thread stack size is 1-4MB, depending on project settings, so 1500 simultaneous clients would be using 1.5-6GB of memory. Indy is not designed for that kind of load. You would need to reduce the number of simultaneous clients, or lower the default stack size. But, on Windows at least, you really need to use Overlapped I/O or I/O Completion Ports to handle that kind of load efficiently, and that is not supported by Indy at this time."

Yukarıda bahsedilen Lazarus örneğinde de Indy kullanılmıyor mu? Orada neden durum farklı? Benim asıl merak ettiğim bu Smile
There's no place like 127.0.0.1
WWW
Cevapla
#23
1500 üzeri client uygulamasında server bellek kullanımı çok fazla olduğuna değinmiş lazarus buna izin veriyor ama delphi uygulaması izin vermiyor.
Cevapla
#24
Evet sorunun çözümünü Remy(rlebeau) nin dediği gibi yaptım ve Client sayısı arttı. 5000 Client ile kendi bilgisayarımda test ettim ve sorunsuz olarak bağlantıları gerçekleştirdim.
Hatta bir adım daha ileri gidip 10000 Client test ettim 5800+ kilitlendi.

Delphi 10.3 ile test ettim. Windows 10 x64 ve 16GB Ram

Sorunun çözümü şu şekilde oldu. Default Stack Size değerlerindeki Max Stack size değerini düşürdüm. Varsayılan Stack Size değerleri burada yazıyor.
Max Stack Size değerini "65536" olarak değiştirdim.

Bu Max Stack Size değerini değiştirime işlemi proje ayarı yerine Compiler Directive ile yapabiliriz.
{$MaxStackSize 65536}

Fakat ben bulamadım bu Stack Size değerinin birimi nedir? Bilen arkadaşlar yardımcı olursa sevinirim. 65536 Byte mı demiş olduk.

@SimaWB, @mcansız muhtemelen Lazarus tarafında çalışmasının nedeni de Stack Size değerlerinin varsayılan olarak Delphi ve Lazarus da farklı olması.

Lazarus tarafında default Stack Size değerini göremedim çok fazlada araştırmadım.
           

Test etmek isteyenler için proje kaynak kodlarının tamamı ekliyorum.

.zip   tcp_socket_test.zip (Dosya Boyutu: 4,94 KB / İndirme Sayısı: 42)
PostgreSQL - Linux - Delphi, Poliüretan
WWW
Cevapla
#25
Max Stack Size değerini "65536" yapınca 6000 yakın bağlantı gerçekleştirdi bu düşürme işlemin bazı zarları olabilir mi. 240 mb rem kullanı oldu NetCom7 ile 9999 bağlantıda 5 mb rem kullanarak 21 saniyede gerçekleştirdi.
Cevapla
#26
@3ddark beyin verdiği test uygulamasını

32 bit ile derleyince 5800+ da kilitlendi
64 bit olarak derleyince 11000+ da kilitlendi.
Cevapla
#27
Aslında canlı olarak görülen ram kullanım miktarı farklı olabilir. Görünen 240mb buz dağının ön yüzü diyebiliriz.

StackSize ile ilgili doküman
https://docs.microsoft.com/en-us/windows...stack-size

Dokümanda yazilana göre byte birimi 65536 byte
1mb Max StackSize değerini 64Kb yapmışız.

Ayrıca client ve server aynı pc olduğu için kullanılan bellek daha olmuş durumda. Farklı PC lerde client ve server olursa muhtemelen sayı daha da artacaktır.
PostgreSQL - Linux - Delphi, Poliüretan
WWW
Cevapla
#28
(24-04-2020, Saat: 04:38)3ddark Adlı Kullanıcıdan Alıntı: Aslında canlı olarak görülen ram kullanım miktarı farklı olabilir. Görünen 240mb buz dağının ön yüzü diyebiliriz.

StackSize ile ilgili doküman
https://docs.microsoft.com/en-us/windows...stack-size

Dokümanda yazilana göre byte birimi 65536 byte
1mb Max StackSize değerini 64Kb yapmışız.

Ayrıca client ve server aynı pc olduğu için kullanılan bellek daha olmuş durumda. Farklı PC lerde client ve server olursa muhtemelen sayı daha da artacaktır.

Maalesef tam tersi 64 bit local 13500 bağlantı gördü datacenter çalışan windows sunucu 64 bit olar server çalıştırdım evdeki pc client çalşıtrdım internet bağlantım yüksek olmasına rağmen 3500 bağlantıya yaklaşamadı.
Cevapla
#29
Datacenter sunucu ram miktarı nedir. Benim anladığım kadarıyla ram burada belirleyici faktör
PostgreSQL - Linux - Delphi, Poliüretan
WWW
Cevapla
#30
16 gb ram vardı 13 gb boşta rem şekilde idi iki teste orada yaptım bir tek server birinde server local client şeklinde sonuçlar bu şekilde
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  server programinda hani veritabani dogru olur. sadikacar60 4 357 30-01-2024, Saat: 21:06
Son Yorum: sadikacar60
  Delphi 7 Indy Komponent SKC3948 12 2.741 22-12-2023, Saat: 20:36
Son Yorum: maydin60
  Indy Problemi m_ekici 5 644 24-10-2023, Saat: 23:15
Son Yorum: m_ekici
  OPC Server veri okuma enigma 1 379 13-09-2023, Saat: 11:50
Son Yorum: shooterman
  Server-client üzerinden Web arayüze erişim SercanTEK 12 7.367 23-02-2023, Saat: 16:08
Son Yorum: SercanTEK



Konuyu Okuyanlar: 1 Ziyaretçi