How to get the max memory usage of a program using psutil in Python

后端 未结 2 723
无人及你
无人及你 2020-12-03 20:04

I am using the following code to get the max memory usage of the program.

    import os, subprocess , psutil
    def mem(cmd):
        try:
            with          


        
2条回答
  •  醉梦人生
    2020-12-03 20:50

    The problem here is that psutils takes a quick snapshot from the /proc filesystem, as you can see in the source.

    When you run your hello world example, in some cases it finishes before python gets a chance to read the values from /proc.

    Once the process is finished, it effectively no longer consumes any ram. You can confirm this with an strace.

    open("/proc/13420/statm", O_RDONLY)     = 3
    read(3, "0 0 0 0 0 0 0\n", 1024)        = 14
    

    If you modify your example to use something like sleep, you'll notice that psutils consistently gives memory usage back.

    #include 
    #include 
    
    int main()
    {
      std::cout << "Hello World.. sleeping!";
      sleep(3);
    }
    

    Output of your python script...

    a.out
    meminfo(rss=286720, vms=12931072)
    

    One simple way to accomplish what you are trying to do, is by using the /usr/bin/time command, which on most platforms will give you the average total memory usage of the process you launch OR use valgrind as J.F Sebastian suggests... whom posted as I was researching and testing my answer ;)

    Hello World.. sleeping!0.00user 0.00system 0:03.00elapsed 0%CPU     
    (0avgtext+0avgdata 1144maxresident)k
    0inputs+0outputs (0major+348minor)pagefaults 0swaps
    

提交回复
热议问题