How to interpret `strace` on an apache process returning `restart_syscall`

apache-2.2memory

We restart an apache server every day because RAM usage reaches its limit.

Though of value See this serverfault answer, I dont think lowering the MaxClients in the apache configuration is a solution to the unknown root problem.

The apache processes below appear unusually large in MB and long in time. Does this mean there is memory leakage. Does this mean we should lower MaxRequestsPerChild settings?

See http://www.devside.net/articles/apache-performance-tuning

Can you make sense out of the below data?

Below is an extract of what

$top with M

returns:

20839 www-data  20   0 1008m 359m  22m S    4  4.8   1:52.61 apache2                     
20844 www-data  20   0 1008m 358m  22m S    1  4.8   1:51.85 apache2                     
20842 www-data  20   0 1008m 356m  22m S    1  4.8   1:54.60 apache2                     
20845 www-data  20   0  944m 353m  22m S    0  4.7   1:51.80 apache2  

and then investigating a single process with

$sudo strace -p 20839

returns only this one line, which is cryptic, for me:

restart_syscall(<... resuming interrupted call ...> <unfinished ...>

Any insights? Thanks.

Best Answer

That line means that the current system call was interrupted by your strace and that strace asked to re-run it. I think that the process you are tracing is sleeping.

If apache is forking too many clients and the server start paging to disk, then you should lower the MaxClients directive.

MaxClients <= (RAM - RSS_all_other_processes)/(apache_process_RSS - apache_SHR) - 1