Java Servisinin Kendi Kendine Durması Sorunsalı

Çalıştığım şirkette eski de olsa Glassfish 2.1.1 sunucusu üzerinde barındırdığımız bir uygulamamız var. Bütün sistemi daha yeni ve hızlı bir ortama taşımamız gerektiğinde Glassfish uygulama sunucusu yeni donanımlar üzerine yüklendi ve gerekli ayarlamaları yapıldı. Ancak test aşamasında farkettik ki Glassfish sunucusunun yüklü olduğu makinede kullanıcı oturumunu kapattığı anda uygulama yanıt vermeyi kesiyor. Biraz araştırma yapınca farkettik ki kullanıcı makinede oturum kapattığı anda java.exe servisi çalışmayı durduruyor.

Google sağolsun çözümü bulmak çok uzun sürmedi. Meğerse kullanıcı oturum kapattığı anda JVM işletim sisteminden gelen bir sinyalle kendini durduruyormus. Bu davranışı devre dışı bırakmak için JVM parametrelerini biraz kurcalamak gerekti. JVM’yi -Xrs parametresiyle çalıştırdıgımız zaman kullanıcı oturum kapatsa bile JVM arka planda çalışmaya devam edecektir. Bizim sorunumuz Glassfish sunucusu ile olduğu için domain.xml dosyasına -Xrs parametresini de ekleyerek sorunu çözdük.

Ancak dikkat edilmesi gereken bir nokta var. -X ile başlayan JVM parametreleri standart değil yani her JVM gerçekleştiriminde yer almayabilir veya olsa bile aynı şekilde davranmayabilir. Komut satırında java -X komutunu girerseniz sizin JVM’nizin hangi parametreleri desteklediğini görebilirsiniz.

Share

JVM – İçeride Neler Oluyor?

Java ile uğraşan hemen herkes JVM (Java Virtual Machine) hakkında az çok bilgiye sahiptir. Basit olarak söylemek gerekirse JVM, yazdığımız java uygulamalarını çalıştıran sanal bir makinedir. Peki bu sanal makinenin içerisinde arka planda neler döndüğünü hiç merak ettiniz mi? Bu yazıda programcıların yazdığı .java uzantılı bir kod dosyasının derlendikten sonra hangi aşamalardan geçerek çalıştırıldığını anlatmaya çalışacağım. JVM ile ilgili daha basit düzeyde detaylı bilgi almak istiyorsanız bu adresteki yazımı okuyabilirsiniz.

Bir java programcısının yazdığı .java uzantılı dosya, Java derleyicisi tarafından derlenerek çalıştırılmaya hazır .class uzantılı bir “bytecode” dosyasına dönüştürülür. Bu aşamadan sonra programın çalıştırılması işini JVM yapar. JVM bir Java programını çalıştırmadan önce “yükleme”, “bağlama” ve “ilklendirme” olmak üzere 3 aşamadan geçirir. Şimdi sırasıyla bunları inceleyelim.

Devamını Oku…

Share

Java Virtual Machine Nedir?

JVM’nin basit olarak Java programlarını çalıştıran sanal bir makine olduğunu biliyor olabilirsiniz ancak yine de bu yazıyı okumanızı tavsiye ederim. Çünkü JVM hakkında bilinmesi gereken çok ama çok şey var. Bu yazıda bunların bir kısmına değinmeye çalışacağım.

Bildiğiniz gibi Java derleyicisi doğrudan fiziksel bir makinenin çalıştırabileceği makine kodları değil, sadece Java Sanal Makinesinin anlayıp çalıştırabileceği formatta bir kod üretir. Ara bir dil olarak da tanımlanabilen “bytecode”, class uzantılı dosyalar içinde saklanır. Java derleyicisinin işi burada biter ve bundan sonra ikili (binary) formatta kodlanmış olan class dosyalarının çalıştırılması JVM tarafından yapılır.

Devamını Oku…

Share