Asterisk 13 High CPU Usage

Home » Asterisk Users » Asterisk 13 High CPU Usage
Asterisk Users 6 Comments

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

  • 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