Asterisk 13 High CPU Usage
Hi all,
I was using 13.5 but upgraded today to 13.9 (13.10 came out a few hours after I upgraded).
On both 13.5 and 13.9 asterisk seems to use 100% of the CPU. This usually happens a few hours after starting asterisk. A restart of asterisk gets the CPU back down, but only for a little while.
There asterisk box has no call traffic flowing through it, just 15 or so registrations.
I’m sure this is not best practise but for now I am using chan_sip and pjsip at the same time. My pjsip endpoints are using TLS.
I am not sure where to start looking in order to debug the CPU usage by asterisk and would very much appreciate some guidance.
Kind regards,
Chirag
6 thoughts on - Asterisk 13 High CPU Usage
Actually v13.10 has some changes to address high CPU usage in regards to pjsip. Also you should look here for more information:
http://blogs.asterisk.org/2016/07/13/asterisk-task-processor-queue-size-warnings/
Richard
If you run ‘top’, the basic information would be to show per-CPU
information (press ‘1’). Another thing to look at: press ‘H’ to get per-thread entries. Do you have many many threads each taking a small part of a core, or a few threads taking lots of CPU time?
I believe that the PID (process/thread ID) you see in top is also the second item in each line in the output of ‘core show threads’. So this could give you some clues regarding the CPU hogs you see in top.
The following bash 1-liner may be useful…
while true; do top -Hbc -p `pgrep asterisk` -n 1 && asterisk -rx “core show threads”; sleep 1; done
Regards,
Ian
asterisk and would very much appreciate some guidance. information (press ‘1’). Another thing to look at: press ‘H’ to get per-thread entries. Do you have many many threads each taking a small part of a core, or a few threads taking lots of CPU time? I believe that the PID
(process/thread ID) you see in top is also the second item in each line in the output of ‘core show threads’. So this could give you some clues regarding the CPU hogs you see in top.
Just for the kicks:
ps –no-headers -L -o lwp,cp –sort lwp `pidof asterisk` \
| join -1 1 -2 2 – <(asterisk -rx 'core show threads' | sort -k2) \ | sort -n -k 2 Notes: 1. Bashism. <(...) requires bash. 2. Join counts on a non-numeric sort. Maybe there's an extrs sort needed for ps, as I guess it sorts numerically. 3. I tried puting this all in watch: watch -n1 -d '...' or watch -n1 -d bash -c "...", but I got an error message: "sh: 1: Syntax error: "(" unexpected" (sh? shouldn’t it be bash?) But at this point I have already exceeded the allocated time slot.
All,
I upgraded to asterisk 13.10. I have minimal load on the box. 20-30 calls a day.
Right now, there are no calls on the box at all.
top shows me this:
PR 20
NI 0
VIRT 1570540
RES 84620
SHR 26296
S S
%CPU 99.7
%MEM 8.4
TIME+ 3468:39
COMMAND asterisk
When I run this command while true; do top -Hbc -p `pgrep asterisk` -n 1 && asterisk -rx “core show threads”; sleep 1; done
I get this
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
29079 root 20 0 1570540 84620 26296 R 37.5 8.4 1178:31 asterisk
29010 root 20 0 1570540 84620 26296 R 31.2 8.4 1197:07 asterisk
29047 root 20 0 1570540 84620 26296 R 31.2 8.4 1186:48 asterisk
Any ideas??
——————
Hi Chirag –
That does seem a bit odd. If you have ‘core show threads’, then you do have DEBUG_THREADS enabled, which can cause a pretty hefty performance hit – but I still wouldn’t expect your CPUs to just be sitting there spinning.
Can you get a backtrace of the threads? [1] Make sure you have DONT_OPTIMIZE and BETTER_BACKTRACES enabled. That should show us what the threads are doing, which would give us a better idea of what is spending all the time processing things.
[1] https://wiki.asterisk.org/wiki/display/AST/Getting+a+Backtrace