我有一个带有DirectAdmin的vps安装在上面。今天,我的服务器中断了一个小时,当我检查通知中心时,我发现一些httpd实例使用了大量的cpu功能。
您可以检查下面的部件顶部命令。我想知道的是我的哪个域名导致了这一切?
top
命令结果:
- 07:52:54上升21:08,0用户,平均负荷: 61.00,19.79,6.98任务: 223总,5次运行,218次睡眠,0停止,0僵尸Cpu(s):3.7%,0.3%sy,0.0%ni,95.6%id,0.3%wa,0.0%si,0.0%st Mem: 1026200k总计,1014088k使用,12112k免费,764 k缓冲区交换:总共3002360k,使用1166920k,1835440k免费, 14084 k缓存PID用户PR NI VIRT响应SHR S% TIME+命令 12684 apache 20 0 55192 15 m 1044 D2.9 1.5 0:01.10 /usr/sbin/httpd -k start -DSSL 12660 apache 20 0 50248 15m 1324 D2.7 0:01.13 /usr/sbin/httpd -k start -DSSL 10782 apache 20 58860 15m 1456 R 2.5 1.5 0:37.45 /usr/sbin/httpd -k start -DSSL 20 0 55144 17m 1044 D2.2 1.7 0:01.04 /usr/sbin/httpd -k start -DSSL 28 root 20 0 0 0 R2.0 0.0 0:00.60 kswapd0 12654 apache 20 0 55144 14m 1044 D2.0 1.5 0:01.03 /usr/sbin/httpd -k start -DSSL 12658 apache 20 0 55144 11m 1044 D2.0 1.1 0:00.94 /usr/sbin/httpd -k start -DSSL 12669 apache 20 0 55144 18m 1044 D 1.7 1.8 0:01.03 /usr/sbin/httpd -k start -DSSL 12695 apache 20 0 55144 18m 1044 D 1.7 1.8 0:01.05 /usr/sbin/httpd -k start -DSSL 12681 apache 20 55176 15m 1044 D 1.5 0:00.94 /usr/ usr/sbin/httpd -k启动-DSSL 12670 apache 20 0 55184 13m 1044 D1.1.3 0:00.85 /usr/sbin/httpd -k start -DSSL 12692 apache 20 0 55144 16 m 1044 D1.0 1.7 0:01.00 /usr/sbin/httpd -k start -DSSL 12696 apache 20 55144 19m 1044 D 1.0 1.9 0:usr/sbin/httpd -k start -DSSL 12700 apache56304 72961028D1.00.7 0:00.79 /usr/sbin/httpd -k start -DSSL 12719 apache 20 54812 11m 1216 S 0.7 0:00.60 /usr/sbin/httpd -k start -DSSL 12734 apache 20 54804 12m 1212 R 0.7 0:00.62 /usr/sbin/httpd -k start -DSSL 12772 apache 20 54812 20m 1724 R0.7 2.1 0:00。63 /usr/sbin/httpd -k start -DSSL
发布于 2011-07-11 17:11:40
正如前面的答案所提到的,查看特定的Apache进程没有很大的价值。
我可能建议您修改您的httpd.conf设置--要么使用更高效的进程(例如PHP而不是mod_php),要么改变服务器/客户端/请求的数量。
通常,在具有多个域的环境中,每个域都拥有自己的用户。(如果您在FastCGI模式下运行PHP,可以很容易地看到哪个PHP进程正在使用重要的资源)。
以下只是为了兴趣-在这种情况下,它几乎没有什么用处:
如果您真的想确定某个特定进程在任何特定时刻服务的站点,您可以运行跟踪以查找文件访问权限。但是,要注意的是,大量的输出将在高流量服务器上快速生成。
例如,下面将显示文件打开(通常只打开.htaccess文件,如果您使用FastCGI)以及目录列表,并且足够标识进程当前正在服务的域:
strace -p PID -e trace=open,lstat64
示例输出:
Process PID attached - interrupt to quit
open("/path/to/website/folder/.htaccess", O_RDONLY|O_LARGEFIL E|O_CLOEXEC) = 66
open("/path/to/website/folder/subfolder/.htaccess", O_RDONLY|O _LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
lstat64("/path", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/path/to", {st_mode=S_IFDIR|0755, st_size=90, ...}) = 0
lstat64("/path/to/website", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/path/to/website/folder", {st_mode=S_IFDIR|0755, st_size=4096, . ..}) = 0
lstat64("/path/to/website/folder/subfolder", {st_mode=S_IFDIR|0750, st_size =21, ...}) = 0
lstat64("/path/to/website/folder/subfolder/php.fcgi", {st_mode=S_IFREG|0750 , st_size=96, ...}) = 0
或者,您可以查看进程读取,grep表示“Host”:
strace -p PID -e trace=read -s 100 2>&1 | grep "Host:"
示例输出:
read(65, "GET /path/of/request/ HTTP/1.0\r\nHost: www.domain.com\r\nX-Real-IP: xxx.xxx.xxx.xx"..., 8000) = 1167
(您可能需要使“字符串长度”(s)值更长)
再一次,记住这两者都是“时间上的瞬间”,看看一个特定的过程所提供的服务--在下一个瞬间,它将改变--因此,除了好奇之外,它对任何事情都是无用的。
发布于 2011-07-11 15:50:42
在最上面的输出中看到的进程反映了产生了多少守护进程来处理到服务器的HTTP/S请求。它们没有明确地链接到特定的网站。当请求到达您的服务器时,一个空闲守护进程将接收该请求,并根据发送到服务器的头信息将其连接到正确的文件。
简而言之,没有一个进程明确地链接到某个特定的站点,但所有这些进程都有可能链接到它。
你好菲尔
发布于 2011-07-11 17:33:41
netstat -tp将告诉您哪个进程为哪个TCP连接服务,允许您将进程映射到主机名。
也就是说,您最好使用Apache的mod_status (http://httpd.apache.org/docs/2.0/mod/mod_status.html),因为它是专门针对这个问题构建的。
不过,看起来CPU并不是你的问题。你有1200万的空闲内存,而且你正在大量地进行交换。
https://serverfault.com/questions/289072
复制相似问题