Fd leaks with packed repos

Bug #929648 reported by arhibot
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Dulwich
Fix Released
Undecided
Unassigned

Bug Description

Hi.

I have problem with packed repos and count of open files. Size of repo about 15M.

System:
$ lsb_release -d
Description: Ubuntu 10.04 LTS
$ python --version
Python 2.6.5
$ python -c "import dulwich; print dulwich.__version__"
(0, 8, 3)

Simple code to reproduce problem:
===
$ cat fd_leak.py
import sys

from dulwich.repo import Repo

def open_repo(path):
    return Repo(path)

def get_branches(repo):
    refs = repo.refs.keys()
    return [x.replace('refs/heads/', '') for x in refs if x != 'HEAD']

repo_path = sys.argv[1]
for x in xrange(10000):
    repo = open_repo(repo_path)
    ref = repo["refs/heads/master"]
    print get_branches(repo)

input('>')
===

Before execution of the script i have no open files:
$ lsof | grep python | grep "/home/username/git_repo" | wc -l
0

After runing of script:
$ lsof | grep python | grep "/home/username/git_repo" | wc -l
59
$ lsof | grep python | grep "/home/username/git_repo" | wc -l
93

Script waiting for input:
$ lsof | grep python | grep "/home/username/git_repo" | wc -l
54

Full lsof output:
$ lsof | grep python | grep "/home/username/git_repo"
python 20258 username mem REG 8,33 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx (path dev=0,114)
python 20258 username 4r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 5r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 6r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 7r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 8r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 9r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 10r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 11r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 12r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 13r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 14r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 15r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 16r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 17r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 18r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 19r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 20r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 21r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 22r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 23r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 24r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 25r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 26r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 27r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 28r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 29r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 30r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 31r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 32r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 33r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 34r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 35r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 36r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 37r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 38r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 arhibot 39r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 40r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 41r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 109r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 110r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 111r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 112r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 113r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 114r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 115r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 116r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 120r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 121r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 122r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 123r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 124r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 125r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx
python 20258 username 126r REG 0,114 2473808 14648564 /home/username/git_repo/objects/pack/pack-617a0ac46c124c68ffa6dc12131e0882d4af464c.idx

Revision history for this message
arhibot (arhibot) wrote :

FYI: It's mmap idx files but don't unmap it.

Revision history for this message
arhibot (arhibot) wrote :

Sorry, the last message is my mistake. Force call of gc.collect() closes all files.

Jelmer Vernooij (jelmer)
Changed in dulwich:
status: New → Incomplete
status: Incomplete → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.