işliyor Scala'da bir çok eşzamanlı iş parçacığı ve sistem çağrısı var. Bu sistemin bir problemi var çünkü hafıza kullanımı zamanla artıyor.Scala'da bellek sızıntısı var ve
Görüntü körüğü bir gün için bellek kullanımını gösterir. Limite ulaştığında süreç kapanıyor ve tekrar kurtarmak için bir bekçi köpeği koydum.
Ben periyodik komutunu
jcmd <pid> GC.run
çalıştırmak Ve bu bellek yavaş yavaş artmaya yapar, ama kaçak hala olmuyor.
jvisualvm ile analiz ettim, zaman içinde farklı anlarla karşılaştırarak, 40 dakika delta. Görüntü körüğü, bu iki anın zaman içindeki karşılaştırmasını gösterir. ConcurrentHashMap$HashEntry
,, WeakReference
, char[]
ve String
gibi bazı sınıfların örneklerini ve scala.collection.concurrent
paketindeki birçok sınıf için bir artış olduğuna dikkat edin.
?
Düzenleme 1: JVisualVM incelenmesi , bunu sbt.TrapExit $ App sınıf içinde instanced edilir TriedMap içindedir CNode ve INode sınıfların nesne ettim. İşte nesne hiyerarşisi rakamdır:
http://stackoverflow.com/questions/1218872/avoiding-scala-memory-leaks-scala-constructors?rq=1 http://stackoverflow.com/questions/7944148/weakreference-and-memory-leaks http : //stackoverflow.com/questions/3871960/long-lived-java-weakreferences – Tony
List.toStream.map'i görüyorum, ama scala.collection.concurrent nereden geliyor? "Çok fazla ip" derken, "foo.par" kelimesini çok mu kastediyorsunuz? Paralel koleksiyonlarda uzman olarak sormuyorum. Açıkça bir TrieMap kullanıyor musunuz? –
Çok fazla iş parçacığı Yüzlerce oyuncu olduğu anlamına gelir, her bir oyuncu sistem çağrıları yapar ve görevleri eşzamansız yürütmek için bazı gelecekler oluşturur. Ben açıkça TrieMap kullanmıyorum. –