Merhaba MMOZirve ailesi,
Bugün size bugüne kadar forumda derinlemesine işlenmemiş, ancak büyük projelerin (1000+ Online) olmazsa olmazı bir konuyu anlatacağım: Memory Leak (Bellek Sızıntısı) Tespiti.
Birçok server sahibi "Sunucumda neden lag var?" veya "3 gün sonra RAM doluyor, reboot atmam gerekiyor" diyor. İşte bunun en büyük sebebi, eklediğiniz sistemlerdeki düzgün kapatılmamış
🛠 1. Adım: Valgrind Kurulumu
Sunucunuza (Putty üzerinden) aşağıdaki işletim sisteminize uygun komutu yazın:
FreeBSD Kullanıyorsanız:
Kod:
Kod:
Normalde oyununuzu
Kod:
Sızıntı yapmamak için C++ yazarken alışkanlıklarımızı modern yöntemlere taşımalıyız:
4. Raporu İnceleme (leak_rapor.txt)
Komutu çalıştırdıktan bir süre sonra (oyuna girip biraz gezdikten sonra) dizinde oluşan leak_rapor.txt dosyasını WinSCP ile bilgisayarınıza çekin. İçinde şu tarz bir hata görürseniz sızıntıyı buldunuz demektir:
Kod:
Bugün size bugüne kadar forumda derinlemesine işlenmemiş, ancak büyük projelerin (1000+ Online) olmazsa olmazı bir konuyu anlatacağım: Memory Leak (Bellek Sızıntısı) Tespiti.
Birçok server sahibi "Sunucumda neden lag var?" veya "3 gün sonra RAM doluyor, reboot atmam gerekiyor" diyor. İşte bunun en büyük sebebi, eklediğiniz sistemlerdeki düzgün kapatılmamış
new ve malloc komutlarıdır. Bu rehberle bu sızıntıları "nokta atışı" bulacağız.🛠 1. Adım: Valgrind Kurulumu
Sunucunuza (Putty üzerinden) aşağıdaki işletim sisteminize uygun komutu yazın:
FreeBSD Kullanıyorsanız:
Kod:
pkg install -y valgrind
Ubuntu veya Debian Kullanıyorsanız:Kod:
sudo apt-get update && sudo apt-get install valgrind -y
🚀 2. Adım: Game Core Analizini BaşlatmaNormalde oyununuzu
./sh start.sh veya ./game diyerek başlatıyorsunuz. Sızıntıları yakalamak için oyunu Valgrind üzerinden çalıştırmalıyız. Game dosyanızın olduğu dizine girin ve şu komutu verin:Kod:
valgrind --leak-check=full --show-leak-kinds=all --log-file=leak_rapor.txt ./game
NOT: Valgrind, bellek hareketlerini anlık izlediği için oyun bu modda biraz yavaş çalışabilir. Bu sadece test içindir, sızıntıları bulup düzelttikten sonra oyunu normal şekilde başlatabilirsiniz.3. Pointer Karşılaştırma Tablosu (Doğru Kullanım)
Sızıntı yapmamak için C++ yazarken alışkanlıklarımızı modern yöntemlere taşımalıyız:
| Özellik | Klasik Pointer (Raw) | Modern Pointer (Smart) |
|---|---|---|
| Yazım Şekli | CHARACTER* ch = new CHARACTER; | auto ch = std::make_unique<CHARACTER>(); |
| Silme İşlemi | Manuel delete ch; gerekir. | Otomatik silinir. |
| Sızıntı Riski | ❌ Çok Yüksek | ✅ Sıfır |
Komutu çalıştırdıktan bir süre sonra (oyuna girip biraz gezdikten sonra) dizinde oluşan leak_rapor.txt dosyasını WinSCP ile bilgisayarınıza çekin. İçinde şu tarz bir hata görürseniz sızıntıyı buldunuz demektir:
Kod:
40 bytes in 1 blocks are definitely lost
at 0x4C29F73: malloc (vgpreload_memcheck.so)
by 0x401087: CreateNewItem (item_manager.cpp:150)
Bu rapor bize ne diyor?
[]definitely lost: Kesin bir bellek sızıntısı var.
[]item_manager.cpp:150: 150. satırda bir bellek açılmış ama asla kapatılmamış (silinmemiş).
[]Her yeni sistem eklediğinizde mutlaka 10-15 dakika Valgrind ile test yapın.
[]Eski tipnewkullanıyorsanız, mutlakadestructoriçerisindedeleteişlemini yapın.- Sunucunuzun 1 hafta boyunca "reboot" istemeden stabil kalmasını istiyorsanız bu optimizasyon şarttır.


