拷贝自https://github.com/anjuke/zguide-cn/blob/master/chapter2.md
任何长时间运行的程序都应该妥善的管理内存,否则最终会发生内存溢出,导致程序崩溃。如果你所使用的编程语言会自动帮你完成内存管理,那就要恭喜你了。但若你使用类似C/C++之类的语言时,就需要自己动手进行内存管理了。下面会介绍一个名为valgrind的工具,可以用它来报告内存泄露的问题。
-
在Ubuntu或Debian操作系统上安装valgrind:sudo apt-get install valgrind
-
缺省情况下,ZMQ会让valgrind不停地报错,想要屏蔽警告的话可以在编译ZMQ时使用ZMQ_MAKE_VALGRIND_HAPPY宏选项:
$ cd zeromq2
$ export CPPFLAGS=-DZMQ_MAKE_VALGRIND_HAPPY
$ ./configure
$ make clean; make
$ sudo make install
-
应用程序应该正确地处理Ctrl-C,特别是对于长时间运行的程序(如队列装置),如果不这么做,valgrind会报告所有已分配的内存发生了错误。
-
使用-DDEBUG选项编译程序,这样可以让valgrind告诉你具体是哪段代码发生了内存溢出。
-
最后,使用如下方法运行valgrind:
valgrind --tool=memcheck --leak-check=full someprog
解决完所有的问题后,你会看到以下信息:
==30536== ERROR SUMMARY: 0 errors from 0 contexts...