[ 
https://issues.apache.org/jira/browse/HTTPCLIENT-1858?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16057105#comment-16057105
 ] 

Arya Ketan commented on HTTPCLIENT-1858:
----------------------------------------

Totally agree that wire log should not be turned on during perf test and I 
havent set any specific attribute for turning it on. Also,  in my log4j2.xml,  
org.apache.http logger's level is at error and root is at info, So its quite 
baffling to me as to why this piece of code is getting called. Maybe I am 
missing something. could you be kind enough to help me. 
Snapshot of flight recorder which shows GC pressure due to said code is 
attached.



> Very high GC pressure due to wire logging
> -----------------------------------------
>
>                 Key: HTTPCLIENT-1858
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1858
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient (classic)
>    Affects Versions: 4.5.2
>            Reporter: Arya Ketan
>            Priority: Minor
>              Labels: performance
>         Attachments: Screen Shot 2017-06-21 at 1.11.46 pm.png
>
>
> While running performance tests, I am seeing very high GC pressure due to the 
> following code
> in Wire.java 
> {code:java}
> private void wire(final String header, final InputStream instream)
>       throws IOException {
>         final StringBuilder buffer = new StringBuilder();
>         int ch;
>         while ((ch = instream.read()) != -1) {
>             if (ch == 13) {
>                 buffer.append("[\\r]");
>             } else if (ch == 10) {
>                     buffer.append("[\\n]\"");
>                     buffer.insert(0, "\"");
>                     buffer.insert(0, header);
>                     log.debug(id + " " + buffer.toString());
>                     buffer.setLength(0);
>             } else if ((ch < 32) || (ch > 127)) {
>                 buffer.append("[0x");
>                 buffer.append(Integer.toHexString(ch));
>                 buffer.append("]");
>             } else {
>                 buffer.append((char) ch);
>             }
>         }
>         if (buffer.length() > 0) {
>             buffer.append('\"');
>             buffer.insert(0, '\"');
>             buffer.insert(0, header);
>             log.debug(id + " " + buffer.toString());
>         }
>     }
> {code}
> This is because, we are trying to expand Stringbuffer continously , thus 
> leading to lot of char[] garbage. 
> 2 suggestions for improvements
> a) we look into whether logging level is enabled and only then construct the 
> message
> b) efficiently construct log message.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

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

Reply via email to