不要對md5file.read()計算md5值
阿新 • • 發佈:2018-12-28
最近遇到的一個問題,我使用以下程式碼對備份檔案計算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() |