[ 
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

Reply via email to