Thread overview
profilegc.log dosyasının oluşturulmaması
Dec 01, 2019
kerdemdemir
Dec 02, 2019
kerdemdemir
December 01, 2019

/dub build --compiler=/home/erdem/dlang/ldc-1.16.0/bin/ldc2 --build=profile-gc --DRT-gcopt=profile:1

İle derliyorum.

./dub run --compiler=/home/erdem/dlang/ldc-1.16.0/bin/ldc2 --DRT-gcopt=profile:1 | tee output.txt &

Çalıştırıyorum hatta sorun dub'tadır diye direk binary 'i çağırmayı bile denedim ama

profilegc.log dosyası oluşmuyor . Programı kill -15, kill -6 ile öldürmeyi denedim hiç biri işe yaramadı. 15 dakka sonra programı gönüllü return ile sonlandırdım oda bir şey yazdırmadı.

Bu kadar şey denerken hangisi bilmem bir yöntemde başarılı oldum ama hangisi olduğunu bilmediğimden tekrarlayamıyorum.

Profilegc.log neden oluşmuyor ne yapsam ?

Erdem

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 02, 2019

Yok çözemedim..

Dellendim şöyle bir kod yazdım :

void PrintMemory( string memoryOwner )
{
import std.process : spawnProcess, executeShell;
import std.stdio : writeln;
import core.thread;

   if ( isPrintMemory == false )
       return;

   string command = "pmap " ~  getpid().to!string ~ " " ~ "| tail -n 1 | awk '/[0-9]K/{print $2}'";
   auto result = executeShell(command);
   writeln(result);
   int currentRamUsage = result[1].chomp().chomp("K").to!int;
   if ( memoryOwner == "Start")
   {
       if ( currentRamUsage - loopMemoryUsage > 0 )
           writeln( "Current memory: ", currentRamUsage, " Diff: ", currentRamUsage - loopMemoryUsage);
       loopMemoryUsage = currentRamUsage;
   }
   else
   {
       if ( currentRamUsage - lastMemoryUsage > 0 )
           writeln( "Printing memory: ", memoryOwner , " Diff: ", currentRamUsage - lastMemoryUsage );
   }
   lastMemoryUsage = currentRamUsage;

}

Kodun kritik yerlerinden çağırıyorum şunun gibi :

void UpdateSublist(CurrencyList sublist)
{
client.Update(sublist);
PrintMemory("Client");
analyzer.Analyze(sublist);
PrintMemory("Analyzer");
priotizer.Priotize(sublist);
PrintMemory("Priotizer");
finalizer.Finalize(sublist);
PrintMemory("Finalizer");
}

Çözecem ben bu işi yoksa programımı çalıştırdığım serverlarda büyük ram kiralamak zorunda kalıyorum ve ekonomik olarak zorluyor beni.

Belki birinin işine yarar.
Erdemdem.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 02, 2019

Çok iyi anlıyorum: bin bir tane şey var. :)

Ben dub kullanmıyorum. Normal çalıştırınca profilegc.log dosyası oluşuyor. Tek yaptığım, '-profile=gc' ile derlemek ve programı temiz bir şekilde sonlandırmak. Sanırım dosya programın başlangıç klasörüne yazılıyor. Ben komut satırından başlatıyorum ve aynı klasörde buluyorum.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]