3 Ekim 2023 Salı

surefire plugin - surefirebooter Process

surefirebooter Nedir ?
Açıklaması şöyle. Yani birim testleri çalıştıran uygulama
API and Facilities used by forked tests running in JVM sub-process.
surefirebooter Uygulamasını Nasıl Görebilirim ?
mvn clean install ile testleri koşmaya başlarız. surefire çalışınca jps komutu ile çalışan java uygulamalarına bakarız. surefirebooter-abc.jar diye bir process görürüz. 

Kaç Tane surefirebooter Çalışır ?
Kaç tane çalışacağını forkCount tag ile kontrol ediyoruz. Belirtilen sayı kadar kadar surefirebooter çalışıyor

Too many open files Hatası
Linux veya MacOs ile çalışıyorsak ulimit ile açılabilecek dosya için sınır koysak bile JVM çalışırken bu sınırı değiştiriyor. Bunu gösteren bir açıklama burada. Yani bir anlamda ulimit etkin değil. JVM kendi kendine bir üst sınır koyuyor ve MacOS için bu üst sınır değeri 10240.

Bunu değiştirmek için -XX:- MaxFDLimit seçeneği kullanılır

Bu seçeneği gösteren bir örnek burada

Ben de şöyle bir kod yazdım
public static void main(String[] args) throws Exception {
  List<InputStream> streams = new ArrayList<>();
  int index = 0;
  while (true) {
    FileInputStream fileInputStream = new FileInputStream("/dev/null");
    streams.add(fileInputStream);
    System.out.println("Index " + ++index);
  }
}
MacOS'ta eğer şöyle çalıştırırsam aldığım sonuç 10235
java scratch.java
Şimdi ulimit ile üst sınır koyalım
ulimit -n 2000
Tekrar MacOS'ta eğer şöyle çalıştırırsam aldığım sonuç 1995
java  -XX:- MaxFDLimit scratch.java
Benzer bir açıklama burada
The JVM on macOS has its own built-in max open files limit, set to 10240. This limit can be removed by passing the -XX:-MaxFDLimit option to the JVM.

However, if the built-in limit is removed, the JVM starts to use the soft limit as the absolute limit. Soft limits can be set very low, which makes the JVM option seemingly not working. This should be taken into consideration when using this JVM option.
maven ile çalıştırmak için şöyle yaparız
MAVEN_OPTS="$MAVEN_OPTS -XX:-MaxFDLimit"; export MAVEN_OPTS;  
Daha sonra şöyle yaparız
mvn test -Dtest=Foo 





Local Snapshot Kullanmak

Örnek Şöyle yaparız <repository> <id>snapshot-repository</id> <name>Maven2 Snapshot Repository</name> &l...