Hikayeler

Reklam vermek için turkmmo@gmail.com

[REHBER] Game Source’un Gizli Katili: Memory Leak ve Valgrind ile RAM Optimizasyonu

memodalxxx

[CoMa].flex
Telefon Numarası Onaylanmış Üye TC Kimlik Numarası Doğrulanmış Üye
TM Üye
Katılım
22 Ara 2011
Konular
49
Mesajlar
245
Online süresi
6g 54289s
Reaksiyon Skoru
186
Altın Konu
2
Başarım Puanı
138
TM Yaşı
14 Yıl 4 Ay 2 Gün
MmoLira
138
DevLira
6

Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!

Merhaba Turkmmo 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ış 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şlatma
Normalde 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:
ÖzellikKlasik Pointer (Raw)Modern Pointer (Smart)
Yazım ŞekliCHARACTER* ch = new CHARACTER;auto ch = std::make_unique<CHARACTER>();
Silme İşlemiManuel delete ch; gerekir.Otomatik silinir.
Sızıntı Riski❌ Çok Yüksek✅ Sıfır

🔍 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:
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ş).

✅ Sonuç ve Öneriler

  • []Her yeni sistem eklediğinizde mutlaka 10-15 dakika Valgrind ile test yapın.
    []Eski tip new kullanıyorsanız, mutlaka destructor içerisinde delete işlemini yapın.
  • Sunucunuzun 1 hafta boyunca "reboot" istemeden stabil kalmasını istiyorsanız bu optimizasyon şarttır.
Umarım bu konu server geliştiren arkadaşların ufkunu açar. Bir sorunuz olursa konu altından sorabilirsiniz, elimden geldiğince loglarınızı incelemenize yardımcı olurum.
 

En Çok Reaksiyon Alan Mesajlar

UYGUN KATEGORİYE TAŞINMIŞTIR İYİ FORUMLAR DİLERİM.
 
Eline sağlik bro iyi formlar hg :)
 
Eline saglk saol 👍
 
Konu uygun kategoriye taşınmıştır.
Eline emeğine sağlık
 
Son düzenleme:

Şu an konuyu görüntüleyenler (Toplam : 1, Üye: 0, Misafir: 1)

Geri
Üst