DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
Collecting Impala CPU and Heap Profiles
Impala implements the pprof remote server handlers to make easy to collect CPU and heap profiles from a running Impala (statestore or impalad) services using pprof.
There are currently three supported profiles:
- heap profile (exported under: hostname:25000/pprof/heap)
- heap-profiling delta (heap growth) (exported at: hostname:25000/pprof/growth)
- cpu profile (exported at: hostname:25000/pprof/profile)
How to Collect Profile Data
The best way to collect profile data is the run pprof on a machine that has access to the Impala debug web server. Currently, Impala does not fully implement symbol resolution. To get symbolized results, you must pass in a matching impalad binary to pprof. This can be done by either copying remote server binary locally or running pprof on the remote machine. See usage examples below.
In a pinch (e.g. running on a locked down server) you can get the profile with curl or wget, e.g.
wget http://hostname:25000/pprof/profile wget http://hostname:25000/pprof/heap wget http://hostname:25000/pprof/growth # If you are running a test cluster or similar with self-signed certs, you may need to pass an extra flag. wget --no-check-certificate https://hostname:25000/pprof/heap
Installing Google Perf Tools
You will need pprof, which is part of the Google Perf Tools suite: https://github.com/gperftools/gperftools
This is available as an OS package on many distributions:
- Ubuntu: sudo apt-get install google-perftools (NOTE: pprof is renamed google-pprof on Ubuntu)
- Centos/RHEL: yum install google-perftools
It is also included in the Impala toolchain under: gperftools-${IMPALA_GPERFTOOLS_VERSION}/
CPU Profile
To collect a CPU profile run:
# This defaults to sampling over a 30 second time period pprof --text /path/to/impalad http://hostname:25000/pprof/profile # To produce a PDF with the call graph: pprof --pdf /path/to/impalad http://hostname:25000/pprof/profile > profile.pdf # To sample over a longer/shorter period of time set the "seconds" argument. pprof --text /path/to/impalad http://hostname:25000/pprof/profile?seconds=30
Heap Profile
To collect a heap profile run:
# This defaults to sampling over a 30 second time period pprof --text /path/to/impalad http://hostname:25000/pprof/heap # To sample over a longer/shorter period use the "seconds" argument: pprof --text /path/to/impalad http://hostname:25000/pprof/heap?seconds=60
Heap Growth Profile
To collect a heap growth profile run:
pprof --text /path/to/impalad http://hostname:25000/pprof/growth
Example Output
This is an example of what each result should look like if everything is setup properly:
pprof --text impalad http://localhost:25000/pprof/heap?seconds=5
/home/lskuff/pprof/impalad.1367340295.localhost
Be patient...
Wrote profile to /home/lskuff/pprof/impalad.1367340295.localhost
Total: 35.9 MB
32.0 89.2% 89.2% 32.0 89.2% impala::DiskIoMgr::GetFreeBuffer
2.8 7.7% 96.9% 2.8 7.7% os::malloc
1.0 2.8% 99.7% 1.0 2.8% NoBarrier_CompareAndSwap (inline)
0.0 0.1% 99.8% 0.0 0.1% ObjectSynchronizer::inflate
0.0 0.0% 99.8% 0.0 0.0% llvm::PassNameParser::passRegistered
0.0 0.0% 99.9% 0.0 0.0% std::basic_string::_Rep::_S_create
pprof --text impalad http://localhost:25000/pprof/profile?seconds=5
Wrote profile to /home/lskuff/pprof/impalad.1367340402.localhost
Removing _L_unlock_16 from all stack traces.
Total: 26 samples
1 3.8% 3.8% 1 3.8% 0x00007f0a2faaf6b2
1 3.8% 7.7% 1 3.8% 0x00007f0a2faaf6ce
1 3.8% 11.5% 1 3.8% 0x00007f0a2fab9314
1 3.8% 15.4% 1 3.8% 0x00007f0a2fabe301
1 3.8% 19.2% 1 3.8% 0x00007f0a2fabe647
1 3.8% 23.1% 1 3.8% 0x00007f0a2fad85e0
1 3.8% 26.9% 1 3.8% 0x00007f0a2fae15b0
1 3.8% 30.8% 1 3.8% ::ValueTable::create_expression
1 3.8% 34.6% 1 3.8% ObjectMonitor::TrySpin_VaryDuration
1 3.8% 38.5% 2 7.7% PointerIntPair
1 3.8% 42.3% 1 3.8% SymbolTable::lookup@7e75e0
1 3.8% 46.2% 3 11.5% ValueHandleBase
1 3.8% 50.0% 1 3.8% __read_nocancel
1 3.8% 53.8% 1 3.8% constantPoolOopDesc::klass_at_impl
1 3.8% 57.7% 1 3.8% llvm::APInt::clearUnusedBits
1 3.8% 61.5% 1 3.8% llvm::PassRegistry::getPassInfo
1 3.8% 65.4% 1 3.8% llvm::PassRegistry::getPassRegistry
1 3.8% 69.2% 1 3.8% llvm::PointerIntPair::setInt
pprof --text impalad http://localhost:25000/pprof/growth
Wrote profile to /home/lskuff/pprof/impalad.1367340508.localhost.pprof.growth
Total: 102.0 MB
50.9 49.9% 49.9% 50.9 49.9% os::malloc
40.0 39.2% 89.2% 40.0 39.2% impala::DiskIoMgr::GetFreeBuffer
5.0 4.9% 94.1% 5.0 4.9% zcalloc
2.1 2.0% 96.1% 2.1 2.0% ProfileData::Start
2.0 2.0% 98.0% 2.0 2.0% readCEN
2.0 2.0% 100.0% 2.0 2.0% std::basic_string::_Rep::_S_create
0.0 0.0% 100.0% 1.0 1.0% 0x00007fff49db0801
0.0 0.0% 100.0% 8.1 8.0% Arena::Amalloc
0.0 0.0% 100.0% 3.0 2.9% Arena::Arealloc
0.0 0.0% 100.0% 40.9 40.1% Arena::grow
0.0 0.0% 100.0% 40.9 40.1% C2Compiler::compile_method
0.0 0.0% 100.0% 40.9 40.1% Chunk::operator new
0.0 0.0% 100.0% 7.0 6.9% ChunkPool::allocate
0.0 0.0% 100.0% 10.4 10.2% Compile::Code_Gen