1. 程式人生 > >不要對md5file.read()計算md5值

不要對md5file.read()計算md5值

最近遇到的一個問題,我使用以下程式碼對備份檔案計算MD5值:

# md5file=open("%s" % outputpath+"/local/oplog.rs.bson", 'rb')
# md5=hashlib.md5(md5file.read()).hexdigest()
# md5file.close()

導致了部分備份節點的guestagent被kill,發生了oom現象。

後來調查原因:是因為被計算的檔案大小過大,上面的程式碼需要將檔案全部讀到記憶體中才能計算MD5。當此檔案過大時,會導致記憶體超出配額,觸發了oom。

 

現在已經改成老老實實的用linux命令計算MD5了:

md5cmd="md5sum "+ "%s" % outputpath+"/local/oplog.rs.bson"
status, output = commands.getstatusoutput(md5cmd)
md5 = output.split()[0]

 

+ # md5file=open("%s" % outputpath+"/local/oplog.rs.bson", 'rb')
    838 + # md5=hashlib.md5(md5file.read()).hexdigest()
    839 + # md5file.close()