hadoop-pig-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bill Graham (JIRA)" <j...@apache.org>
Subject [jira] Updated: (PIG-1313) PigServer leaks memory over time
Date Mon, 22 Mar 2010 23:47:27 GMT

     [ https://issues.apache.org/jira/browse/PIG-1313?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Bill Graham updated PIG-1313:
-----------------------------

    Attachment: Pig1313Reproducer.java

Attaching {{Pig1313Reproducer.java}}, which is a class that can be used to reproduce the issue.
It re-runs a PigServer job in an infinite loop.

It's difficult to expose run time info about the toDelete Stack because it's private but you
can run a script like this to repeatedly dump the size/count of the elements on the Stack:

{{while true; do jmap -histo <pid> | grep HFile; sleep 5; done}}

Over time the overall count of HFile objects will increase.

> PigServer leaks memory over time
> --------------------------------
>
>                 Key: PIG-1313
>                 URL: https://issues.apache.org/jira/browse/PIG-1313
>             Project: Pig
>          Issue Type: Bug
>            Reporter: Bill Graham
>         Attachments: Pig1313Reproducer.java
>
>
> When {{PigServer}} runs it creates temporary files using the {{FileLocalizer.getTemporaryPath(..)}}.
This static method creates and returns a handle to a temporary file (as an instance of {{ElementDescriptor}}).
The {{ElementDescriptors}} returned by this method are kept on a static {{Stack}} named {{toDelete}}.
The items on {{toDelete}} get removed by the {{FileLocalizer.deleteTempFile()}} method.
> The only place in the code where I see {{FileLocalizer.deleteTempFile()}} called is in
the Main class. {{PigServer}} does not call that method though, so a long-running VM that
repeatedly uses instances of {{PigServer}} to run jobs will leak memory via {{toDelete}}.
> One suggested fix is to have {{PigServer.shutdown()}} call {{FileLocalizer.deleteTempFile()}},
but this would cause problems in a multi-threaded environment, since it seems {{ElementDescriptors}}
are pushed onto the {{toDelete}} stack before they're used, not once they're done with. With
this approach, running multiple instances of {{PigServer}} in separate threads could cause
one completed job to clobber the other's still-in-use temp files.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message