你如何解释返回 `restart_syscall` 的 apache 进程上的 `strace`?

b_d*_*dev 6 memory apache-2.2

我们每天都重新启动 apache 服务器,因为 RAM 使用量达到了极限。

虽然有价值看到这个 serverfault answer,我不认为降低MaxClientsapache 配置是解决未知根问题的方法。

下面的 apache 进程以 MB 为单位出现异常大并且时间很长。这是否意味着存在内存泄漏。这是否意味着我们应该降低 MaxRequestsPerChild 设置?

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

你能理解下面的数据吗?

下面是摘录什么

$topM

返回:

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  
Run Code Online (Sandbox Code Playgroud)

然后调查一个单一的过程

$sudo strace -p 20839
Run Code Online (Sandbox Code Playgroud)

只返回这一行,对我来说是神秘的:

restart_syscall(<... resuming interrupted call ...> <unfinished ...>
Run Code Online (Sandbox Code Playgroud)

任何见解?谢谢。

Mir*_*ici 5

该行意味着当前的系统调用被 strace 中断,并且 strace 要求重新运行它。我认为您正在跟踪的进程正在休眠。

如果 apache 分叉了太多客户端并且服务器开始分页到磁盘,那么您应该降低该MaxClients指令。

最大客户端数 <= (RAM - RSS_all_other_processes)/(apache_process_RSS - apache_SHR) - 1