我在 LAMP 堆栈上运行一个网站,并且是管理服务器的新手。当我运行命令 top 时,它会列出几个名为 nobody 的用户正在访问命令 httpd。这是否对应于我网站上当前的访问者数量?
如果是这样,有时我会有 20 或 30 个“无名小卒”访问我的网站,每个都会占用我一定比例的内存。随着流量的增加,我会增加内存,但还有其他方法可以解决这个问题吗?(我知道这是一个很宽泛的问题,但我需要一些一般性建议)
谢谢
答案1
不,top 代表“进程表”,它会列出您机器上的进程(正在运行、正在休眠、正在等待 I/O 或其他)。在典型的 LAMP 设置中,您将会有一些进程等待、接受连接、处理请求并返回某种空闲状态。因此,它与“活跃用户”的数量没有直接关系。
为了正确分析您的 apache 服务器的负载,您应该使用 apache 写入的日志(通常是 /var/log/apache,请检查您的配置)。
理解正在发生的事情的起点可能是Apache 文档以及 top 的系统手册(man top)。您可以使用以下方式详细了解 apache httpd 当前正在执行的操作mod_status,但请确保使用好的密码保护状态网址。
答案2
到目前为止还没有人回答你关于“nobody”用户的问题......下面是:
当顶部列出用户名“nobody”时,它与哪个用户登录到您的网站完全无关。
top 不知道、不关心、也无法访问有关您的网站或其拥有的用户帐户的详细信息。top 显示有关正在运行的 unix 进程的详细信息,包括每个进程以哪个 unix 用户 id (uid) 运行。
即 top 提到的‘nobody’是运行 apache 进程的 Unix 用户。
假设您的系统配置为以 nobody 用户身份运行 apache,因为这是一个最小权限帐户,即使有人设法破坏 apache 程序,它也无法做太多事情。这是很正常的。有些系统以用户“apache”、“httpd”、“www-data”或其他用户名运行 apache,但以“nobody”身份运行它是可以的……它只是系统上的另一个 unix 用户。
除非您使用 suexec 或类似程序,否则所有 apache 进程都将以“nobody”身份运行,无论谁登录了您的网站。由于您询问的是 nobody 用户是谁,所以我认为可以安全地猜测您没有运行 suexec。
总结一下:不是一个问题,不需要解决。
答案3
Web 服务器通过分叉子 httpd 进程来处理传入连接。这些“额外”进程将等待传入连接,因此不会出现延迟……换句话说,有空闲进程等待处理传入连接请求。
如果您查看 apache 的配置文件,您会看到一个设置,它控制着有多少个备用子进程在等待运行。
当这些进程开始处理新的连接时,如果它们都很忙,那么就会产生更多的 httpd 进程。
然而,它们并不全都在消耗内存;这会产生误导,因为有些内存正在被其他进程共享。
查看 /var/log 中的日志文件(可能是 /var/log/http、/var/log/httpd、或 /var/log/apache 或 /var/log/apache2)。其中列出了所有传入请求。
您可以使用 tail -f /var/log//access.log 进行实时监控;使用 control-c 来退出。