mikemccand commented on issue #15068:
URL: https://github.com/apache/lucene/issues/15068#issuecomment-3188222106

   This test case repros the leak on 9.12.x:
   
   ```
   import java.io.IOException;
   import java.nio.file.Paths;
   import java.util.concurrent.atomic.AtomicLong;
   import java.util.Random;
   import java.nio.file.Files;
   import java.nio.file.Path;
   
   import org.apache.lucene.analysis.standard.StandardAnalyzer;
   import org.apache.lucene.document.Document;
   import org.apache.lucene.document.Field;
   import org.apache.lucene.document.StringField;
   import org.apache.lucene.document.TextField;
   import org.apache.lucene.index.IndexWriter;
   import org.apache.lucene.index.NoMergePolicy;
   import org.apache.lucene.index.IndexWriterConfig;
   import org.apache.lucene.index.SegmentInfos;
   import org.apache.lucene.index.DirectoryReader;
   import org.apache.lucene.store.MMapDirectory;
   import org.apache.lucene.tests.util.LineFileDocs;
   
   // export LUCENE_VERSION=9.12.3; java -fullversion; ./gradlew jar; javac 
-verbose /home/mike/TestSILeak.java -cp 
lucene/core/build/libs/lucene-core-$LUCENE_VERSION-SNAPSHOT.jar:lucene/test-framework/build/libs/lucene-test-framework-$LUCENE_VERSION-SNAPSHOT.jar;
 java -cp 
/home/mike:lucene/core/build/libs/lucene-core-$LUCENE_VERSION-SNAPSHOT.jar:lucene/test-framework/build/libs/lucene-test-framework-$LUCENE_VERSION-SNAPSHOT.jar:lucene/codecs/build/libs/lucene-codecs-$LUCENE_VERSION-SNAPSHOT.jar:/home/mike/.gradle/wrapper/dists/gradle-8.14-bin/38aieal9i53h9rfe7vjup95b9/gradle-8.14/lib/junit-4.13.2.jar:/home/mike/.gradle/wrapper/dists/gradle-8.14-bin/38aieal9i53h9rfe7vjup95b9/gradle-8.14/lib/hamcrest-core-1.3.jar:/home/mike/.gradle/caches/modules-2/files-2.1/com.carrotsearch.randomizedtesting/randomizedtesting-runner/2.8.1/55ffe691e90d31ab916746516654b5701e532d6f/randomizedtesting-runner-2.8.1.jar
 TestSILeak indextmp
   
   public class TestSILeak {
   
     public static void checkMapFile() throws IOException {
       Path filePath = Path.of("/proc/" + ProcessHandle.current().pid() + 
"/maps");
       long totLineCount = Files.lines(filePath).count();
   
       long siLineCount = Files.lines(filePath)
         .filter(line -> line.contains(".si"))
         .count();
   
       System.out.println("MAP COUNT (from " + filePath + "): " + totLineCount 
+ " [" + siLineCount + " si files]");
     }
   
     public static void main(String[] args) throws IOException, 
InterruptedException {
   
       if (args.length != 1) {
         System.out.println("Usage: java TestMSILeak <index dir>");
         System.exit(-1);
       }
       MMapDirectory dir = new MMapDirectory(Paths.get(args[0]));
       System.out.println("map file: /proc/" + ProcessHandle.current().pid() + 
"/maps");
   
       IndexWriterConfig iwc = new IndexWriterConfig(new StandardAnalyzer());
       iwc.setOpenMode(IndexWriterConfig.OpenMode.CREATE);
       iwc.setUseCompoundFile(false);
       // so we are sure we get the N flushed segments:
       iwc.setMergePolicy(NoMergePolicy.INSTANCE);
   
       Random r = new Random(42 * 17);
       LineFileDocs lfd = new LineFileDocs(r);
   
       try (IndexWriter writer = new IndexWriter(dir, iwc)) {
         for(int iter=0;iter<10;iter++) {
           for(int i=0;i<1000;i++) {
             writer.addDocument(lfd.nextDoc());
           }
           writer.commit();
         }
       }
   
       // hold a reader open
       DirectoryReader reader = DirectoryReader.open(dir);
       System.out.println("\nREADER: " + reader);
   
       while (true) {
         // each open will add the N _seg.si files as new maps, until we hit 
the OS limit:
         SegmentInfos sis = SegmentInfos.readLatestCommit(dir);
         //System.out.println("SIS: " + sis);
         checkMapFile();
         Thread.sleep(1000);
       }
     }
   }
   ```
   
   Check out 9.12.x branch and run that long command-line comment, tweaking the 
paths properly to your env, and it produces output something like this:
   
   ```
   openjdk full version "21.0.7+6"
   Starting a Gradle Daemon, 4 busy and 4 incompatible Daemons could not be 
reused, use --status for details
   BUILD SUCCESSFUL in 6s
   WARNING: A restricted method in java.lang.foreign.Linker has been called
   WARNING: java.lang.foreign.Linker::downcallHandle has been called by the 
unnamed module
   WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for this 
module
   
   Aug 14, 2025 8:05:57 AM 
org.apache.lucene.store.MemorySegmentIndexInputProvider <init>
   INFO: Using MemorySegmentIndexInput and native madvise support with Java 21 
or later; to disable start with 
-Dorg.apache.lucene.store.MMapDirectory.enableMemorySegments=false
   map file: /proc/206135/maps
   Aug 14, 2025 8:05:57 AM 
org.apache.lucene.internal.vectorization.VectorizationProvider lookup
   WARNING: Java vector incubator module is not readable. For optimal vector 
performance, pass '--add-modules jdk.incubator.vector' to enable Vector API.
   
   READER: StandardDirectoryReader(segments_z:106 
_p(9.12.3):C1000:[diagnostics={os=Linux, java.vendor=Arch Linux, os.arch=amd64, 
os.version=6.15.2-arch1-1, lucene.version=9.12.3, source=flush, 
timestamp=1755173157857, 
java.runtime.version=21.0.7+6}]:[attributes={Lucene90StoredFieldsFormat.mode=BEST_SPEED}]
 :id=1\
   1pns8d06il0choqhaknlj9aj _q(9.12.3):C1000:[diagnostics={os=Linux, 
java.vendor=Arch Linux, os.arch=amd64, os.version=6.15.2-arch1-1, 
lucene.version=9.12.3, source=flush, timestamp=1755173158149, 
java.runtime.version=21.0.7+6}]:[attributes={Lucene90StoredFieldsFormat.mode=BEST_SPEED}]
 :id=11pns8d06il0choqhaknlj9\
   an _r(9.12.3):C1000:[diagnostics={os=Linux, java.vendor=Arch Linux, 
os.arch=amd64, os.version=6.15.2-arch1-1, lucene.version=9.12.3, source=flush, 
timestamp=1755173158408, 
java.runtime.version=21.0.7+6}]:[attributes={Lucene90StoredFieldsFormat.mode=BEST_SPEED}]
 :id=11pns8d06il0choqhaknlj9ar _s(9.12.3):C1000:[d\
   iagnostics={os=Linux, java.vendor=Arch Linux, os.arch=amd64, 
os.version=6.15.2-arch1-1, lucene.version=9.12.3, source=flush, 
timestamp=1755173158693, 
java.runtime.version=21.0.7+6}]:[attributes={Lucene90StoredFieldsFormat.mode=BEST_SPEED}]
 :id=11pns8d06il0choqhaknlj9av _t(9.12.3):C1000:[diagnostics={os=Linux, \
   java.vendor=Arch Linux, os.arch=amd64, os.version=6.15.2-arch1-1, 
lucene.version=9.12.3, source=flush, timestamp=1755173158985, 
java.runtime.version=21.0.7+6}]:[attributes={Lucene90StoredFieldsFormat.mode=BEST_SPEED}]
 :id=11pns8d06il0choqhaknlj9az _u(9.12.3):C1000:[diagnostics={os=Linux, 
java.vendor=Arch Linux\
   , os.arch=amd64, os.version=6.15.2-arch1-1, lucene.version=9.12.3, 
source=flush, timestamp=1755173159271, 
java.runtime.version=21.0.7+6}]:[attributes={Lucene90StoredFieldsFormat.mode=BEST_SPEED}]
 :id=11pns8d06il0choqhaknlj9b3 _v(9.12.3):C1000:[diagnostics={os=Linux, 
java.vendor=Arch Linux, os.arch=amd64, os.ve\
   rsion=6.15.2-arch1-1, lucene.version=9.12.3, source=flush, 
timestamp=1755173159574, 
java.runtime.version=21.0.7+6}]:[attributes={Lucene90StoredFieldsFormat.mode=BEST_SPEED}]
 :id=11pns8d06il0choqhaknlj9b7 _w(9.12.3):C1000:[diagnostics={os=Linux, 
java.vendor=Arch Linux, os.arch=amd64, os.version=6.15.2-arch1-1, \
   lucene.version=9.12.3, source=flush, timestamp=1755173159887, 
java.runtime.version=21.0.7+6}]:[attributes={Lucene90StoredFieldsFormat.mode=BEST_SPEED}]
 :id=11pns8d06il0choqhaknlj9bb _x(9.12.3):C1000:[diagnostics={os=Linux, 
java.vendor=Arch Linux, os.arch=amd64, os.version=6.15.2-arch1-1, 
lucene.version=9.12.3,\
    source=flush, timestamp=1755173160211, 
java.runtime.version=21.0.7+6}]:[attributes={Lucene90StoredFieldsFormat.mode=BEST_SPEED}]
 :id=11pns8d06il0choqhaknlj9bf _y(9.12.3):C1000:[diagnostics={os=Linux, 
java.vendor=Arch Linux, os.arch=amd64, os.version=6.15.2-arch1-1, 
lucene.version=9.12.3, source=flush, timesta\
   mp=1755173160536, 
java.runtime.version=21.0.7+6}]:[attributes={Lucene90StoredFieldsFormat.mode=BEST_SPEED}]
 :id=11pns8d06il0choqhaknlj9bj)
   MAP COUNT (from /proc/206135/maps): 512 [10 si files]
   MAP COUNT (from /proc/206135/maps): 521 [20 si files]
   MAP COUNT (from /proc/206135/maps): 531 [30 si files]
   MAP COUNT (from /proc/206135/maps): 541 [40 si files]
   MAP COUNT (from /proc/206135/maps): 551 [50 si files]
   MAP COUNT (from /proc/206135/maps): 561 [60 si files]
   MAP COUNT (from /proc/206135/maps): 571 [70 si files]
   MAP COUNT (from /proc/206135/maps): 581 [80 si files]
   MAP COUNT (from /proc/206135/maps): 591 [90 si files]
   MAP COUNT (from /proc/206135/maps): 601 [100 si files]
   MAP COUNT (from /proc/206135/maps): 611 [110 si files]
   MAP COUNT (from /proc/206135/maps): 621 [120 si files]
   MAP COUNT (from /proc/206135/maps): 631 [130 si files]
   MAP COUNT (from /proc/206135/maps): 641 [140 si files]
   MAP COUNT (from /proc/206135/maps): 651 [150 si files]
   MAP COUNT (from /proc/206135/maps): 661 [160 si files]
   MAP COUNT (from /proc/206135/maps): 671 [170 si files]
   MAP COUNT (from /proc/206135/maps): 681 [180 si files]
   MAP COUNT (from /proc/206135/maps): 691 [190 si files]
   MAP COUNT (from /proc/206135/maps): 701 [200 si files]
   MAP COUNT (from /proc/206135/maps): 711 [210 si files]
   MAP COUNT (from /proc/206135/maps): 721 [220 si files]
   MAP COUNT (from /proc/206135/maps): 731 [230 si files]
   MAP COUNT (from /proc/206135/maps): 741 [240 si files]
   MAP COUNT (from /proc/206135/maps): 751 [250 si files]
   MAP COUNT (from /proc/206135/maps): 761 [260 si files]
   MAP COUNT (from /proc/206135/maps): 771 [270 si files]
   MAP COUNT (from /proc/206135/maps): 781 [280 si files]
   MAP COUNT (from /proc/206135/maps): 791 [290 si files]
   MAP COUNT (from /proc/206135/maps): 801 [300 si files]
   MAP COUNT (from /proc/206135/maps): 811 [310 si files]
   MAP COUNT (from /proc/206135/maps): 821 [320 si files]
   MAP COUNT (from /proc/206135/maps): 831 [330 si files]
   MAP COUNT (from /proc/206135/maps): 841 [340 si files]
   MAP COUNT (from /proc/206135/maps): 851 [350 si files]
   MAP COUNT (from /proc/206135/maps): 861 [360 si files]
   MAP COUNT (from /proc/206135/maps): 871 [370 si files]
   MAP COUNT (from /proc/206135/maps): 881 [380 si files]
   MAP COUNT (from /proc/206135/maps): 891 [390 si files]
   MAP COUNT (from /proc/206135/maps): 901 [400 si files]
   ```
   
   I'm not sure why my gradle leaks daemons like a sieve.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org
For additional commands, e-mail: issues-h...@lucene.apache.org

Reply via email to