我在 shell 中写了这个命令来获取当前对服务器的请求
ps 辅助 | grep php | 厕所
结果:68
因此,此命令返回 68 当前正在浏览我服务器上的一些网站,据我了解,我还写道
ps 辅助 | grep httpd |厕所
结果 12
哪一个是当前请求我服务器上页面的人员的正确号码?第二个问题,我能否准确获取所请求的页面,例如 /home/user1/public_html/page.php 提前致谢
答案1
上面的示例捕获了 php 和 httpd 正在运行的进程数,但实际上并不会显示连接数。如果您只是想大致了解连接数,可以尝试netstat -an | grep :80 | wc -l
查看端口 80 的总连接数(活动状态和等待状态)。
要真正获得有关页面请求、服务器负载和用户跟踪的指标,您需要查看 MRTG 或 Cacti 之类的工具。
扩展答案:
上述命令显示了您正在检查的端口的所有连接,但没有区分活动连接或其他不同状态,如 TIME_WAIT 和 CLOSE_WAIT,也没有按虚拟主机进行细分,它只是该服务器上到 X 端口的所有连接。
如果您在没有 wc -l 管道的情况下运行该命令,您将看到不同的状态,包括 ESTABLISHED、TIME_WAIT 和 CLOSE_WAIT。
CLOSE_WAIT表示对方关闭了连接,TIME_WAIT表示本地关闭了连接。
这些连接会保持几分钟,以确保任何延迟的数据包都能正确匹配和传送。
当客户端请求进入时,您的 Web 服务器(apache、nginx、iis、lighthttp 等)会处理客户端请求并加载文件。如果发现其中包含 php 代码,它会将其交给 php 解释器,然后 php 解释器会连接到数据库(如 postgres 或 mysql),或者将其交还给您的 Web 服务器,然后由 Web 服务器将其传递给客户端。
您会发现,您的 Web 服务器和 php 通常能够处理数百个客户端请求,因此,虽然您可能有 100 多个客户端连接,但您可能只有 1-10 个 httpd 进程,因为每个工作进程都在处理多个客户端请求。
您说netstat -an | grep :80 | wc -l
返回了 3500 个结果,这个事实值得调查。出于好奇,我检查了我们负载最大的生产服务器,目前该服务器的流量为 1.1Mbit,发现在我们用于提供内容服务的不同端口之间只有 141 个连接,但是,如果您的网站流量很大且不是基于会话的,那么这完全可能是合法的。
如果您真的想知道发生了什么,那么只有监控才能告诉您。Cacti 可以让您很好地了解带宽和服务器负载,而 Apache mod_status、MRTG 或 Awstats 等工具可以让您更好地了解每个虚拟主机的流量,并详细了解独立访客和页面流量指标。
如果您只想要一些粗略的数据,可以将状态输入到上面的命令中,即netstat -an | grep :80 | grep ESTABLISHED | wc -l
会显示到端口 80 的 ESTABLISHED 连接数,忽略 CLOSE_WAIT 和 TIME_WAIT。即使这样也只能让您大致了解有多少人正在连接到您的服务器,要了解人们如何使用您的网站,您需要走外部应用程序路线。
希望这可以帮助。