[ https://issues.apache.org/jira/browse/PDFBOX-5771?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17818737#comment-17818737 ]
Tilman Hausherr commented on PDFBOX-5771: ----------------------------------------- I ran your test with 10000 instead of 3000 and here is what I got when I ran "ps -afu" every 30 seconds. So yes it goes up but the last number is below the maximum. Another problem is that this isn't a recent jdk :-( {noformat} USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND tilman 644008 664 1.0 5839836 715380 pts/0 Sl 10:28 0:19 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 768 1.1 5839836 735108 pts/0 Sl 10:28 4:13 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 771 1.1 5839836 737176 pts/0 Sl 10:28 8:06 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 772 1.1 5839836 738304 pts/0 Sl 10:28 11:58 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 773 1.1 5839836 738504 pts/0 Sl 10:28 15:51 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 774 1.1 5839836 739120 pts/0 Sl 10:28 19:45 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 775 1.1 5839836 740172 pts/0 Sl 10:28 23:39 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 775 1.1 5839836 741216 pts/0 Sl 10:28 27:31 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 775 1.1 5839836 741552 pts/0 Sl 10:28 31:24 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 775 1.1 5839836 741088 pts/0 Sl 10:28 35:17 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 775 1.1 5839836 741316 pts/0 Sl 10:28 39:09 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 775 1.1 5839836 741616 pts/0 Sl 10:28 43:02 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 775 1.1 5839836 741616 pts/0 Sl 10:28 46:55 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 775 1.1 5839836 741872 pts/0 Sl 10:28 50:49 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 775 1.1 5839836 741784 pts/0 Sl 10:28 54:42 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 776 1.1 5839836 753136 pts/0 Sl 10:28 58:36 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 776 1.1 5839836 742340 pts/0 Sl 10:28 62:29 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 776 1.1 5839836 742340 pts/0 Sl 10:28 66:23 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 776 1.1 5839836 742340 pts/0 Sl 10:28 70:16 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 776 1.1 5839836 742412 pts/0 Sl 10:28 74:11 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 777 1.1 5839836 742704 pts/0 Sl 10:28 78:05 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 777 1.1 5839836 742704 pts/0 Sl 10:28 82:00 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 777 1.1 5839836 742968 pts/0 Sl 10:28 85:55 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 777 1.1 5839836 742968 pts/0 Sl 10:28 89:48 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 777 1.1 5839836 743232 pts/0 Sl 10:28 93:41 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 777 1.1 5839836 743432 pts/0 Sl 10:28 97:33 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 777 1.1 5839836 743432 pts/0 Sl 10:28 101:26 \_ java -Xmx500m -jar MavenPDFBoxTest.jar tilman 644008 777 1.1 5839836 743140 pts/0 Sl 10:28 105:20 \_ java -Xmx500m -jar MavenPDFBoxTest.jar {noformat} > Adding watermarks to PDFs may suffer native memory leaks > -------------------------------------------------------- > > Key: PDFBOX-5771 > URL: https://issues.apache.org/jira/browse/PDFBOX-5771 > Project: PDFBox > Issue Type: Bug > Environment: java8, java11 > pdfbox2, pdfbox3 > DebianGNU/Linux8 > Reporter: weiteFeng > Priority: Critical > Attachments: App_2024_02_19_103625.jfr, Designing Data Intensive > Applications.pdf, image-2024-02-19-10-41-19-720.png, pdf_for_test.pdf > > > When using the following code to add a watermark to a PDF file, the memory > usage of the Java process will gradually increase, even exceeding the limit > of the maximum heap memory usage. When the process uses memory exceeding the > maximum memory of the machine, the Java process will be killed by the > operating system. > When analyzing the dumped memory, I found that when the Java process occupies > a large amount of memory (viewed through the top command), the heap memory of > the process actually does not occupy too much space, so I inferred that there > may be a native memory leak in this code, due to I don't have a deep > understanding of Linux memory analysis, so I can't find the problem in this > code. > I wonder if you have any suggestion. > The following is the code I use to add watermarks to PDF: > > {code:java} > public ByteBuffer AddWaterMark(AddWaterMarkRequest request) throws Exception { > byte[] b = TBaseHelper.copyBinary(request.PDFContent).array(); > PDDocument pdf = PDDocument.load(b); > ByteArrayOutputStream output = new ByteArrayOutputStream(); > if (Objects.equals(request.WaterMark.Font, "") || > !this.isFontExist(request.WaterMark.Font)) > { request.WaterMark.Font = pdf_rpcConstants.WenQuanDengKuanZhengHei; } > PDFont font = getFontFromByte(pdf, request.WaterMark.Font); > addWaterMark(pdf, request.WaterMark, font); > pdf.save(output); > pdf.close(); > return ByteBuffer.wrap(output.toByteArray()); > } > > private void addWaterMark(PDDocument pdf, WaterMark waterMark, PDFont font) > throws Exception { > List<String> texts = waterMark.getWaterMarkTexts(); > for (PDPage page : pdf.getPages()) { > PDPageContentStream cs = new PDPageContentStream(pdf, page, > PDPageContentStream.AppendMode.APPEND, true, true); > PDExtendedGraphicsState r0 = new PDExtendedGraphicsState(); > r0.setNonStrokingAlphaConstant((float) waterMark.AlphaConstant); > r0.setAlphaSourceFlag(true); > cs.setGraphicsStateParameters(r0); > cs.setNonStrokingColor(new Color(waterMark.Color.Red, > waterMark.Color.Green, waterMark.Color.Blue)); > float horizontalSpacing = waterMark.HorizontalSpacing; > float verticalSpacing = waterMark.VerticalSpacing; > int horizontalNumber = (int) (page.getMediaBox().getWidth() / > horizontalSpacing) + 2; > int verticalNumber = (int) (page.getMediaBox().getHeight() / > verticalSpacing) + 2; > cs.beginText(); > cs.setFont(font, waterMark.getFontSize()); > for (int i = 0; i <= horizontalNumber; i++) { > for (int j = 0; j < verticalNumber; j++) { > for (int k = 0; k < texts.size(); k++) { > float tx = waterMark.StartIndexX + (i - 1) * > horizontalSpacing + k * waterMark.getLineSpace(); > float ty = waterMark.StartIndexY + j * verticalSpacing; > if (i % 2 == 0) > { > cs.setTextMatrix(Matrix.getRotateInstance(waterMark.RotateTheta, tx, ty)); > } > else > { > cs.setTextMatrix(Matrix.getRotateInstance(waterMark.RotateTheta, tx, ty + > waterMark.Offset)); } > cs.showText(texts.get(k)); > } > } > } > cs.endText(); > cs.restoreGraphicsState(); > cs.close(); > } > } > {code} > > > -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org For additional commands, e-mail: dev-h...@pdfbox.apache.org