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