Finding and fixing memory issues using Valgrind with example of Apache+FastCGI web application
Code reviews and walkthrough help a lot in maintaining a tab on coding practice and allocation/freeing of memory in a application. But over a period of time an application grows with additional number of features being added over a period of time. So it’s always better to have an automated solution to find any memory related issue with your application.
Valgrind is a great tool that helps you do that. For information about valgrind please refer to following links:
Valgrind quick start guide: http://valgrind.org/docs/manual/QuickStart.html
Complete user manual: http://valgrind.org/docs/manual/manual.html
A simple example of using Valgrind to detect memory issues with an Apache+FastCGI web app written in C on a Linux box.
Say that the FastCGI based web app is already in production and running on your servers and you want to use valgrind to check memory related issue, follow following steps.
First install valgrind on the machine where you want to run the web app with valgrind do following:
# wget –c “http://valgrind.org/downloads/valgrind-3.3.1.tar.bz2”
Replace http://valgrind.org/downloads/valgrind-3.3.1.tar.bz2 with the latest available version (as bugs found with previous releases would have been fixed)
# bunzip2 valgrind-3.3.1.tar.bz2
# tar –xvf valgrind-3.3.1.tar
# cd valgrind-3.3.1
# make install
If all the steps go thru properly valgrind will be built and installed in /usr/local/bin. Make sure that it’s in the PATH variable.
Now say the FastCGI configuration looks like in the httpd.conf file:
Instead of changing the whole configuration just write a simple shell script in a directory other than the one containing the actual MyApp FastCGI application
# cat > MyApp
/usr/local/bin/valgrind -v –tool=memcheck –leak-check=full –log-file=/tmp/MyAppValgrind.log /path/to/my/app/ActualMyApp
Then press CTRL+D
Now stop Apache, move the MyApp (actual FastCGI application binary) to ActualMyApp.
Replace the existing MyApp with our new script, make sure it has execute permissions.
Start Apache, you are done. Valgrind will log the issue in /tmp/MyAppValgrind.log file
Note: Compile your program with -g to include debugging information so that Memcheck’s error messages include exact line numbers.
Information on Valgrind Memcheck error messages is available @ http://valgrind.org/docs/manual/mc-manual.html#mc-manual.errormsgs
Happy debugging 🙂
Filed under: debugging | Leave a Comment
Tags: Apache, debugging, fastcgi, memcheck, valgrind