linux下httpd进程cup 100% kill了进程还是自动重启,/proc/pid/exe也找不到该进程的执行文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下httpd进程cup 100% kill了进程还是自动重启,/proc/pid/exe也找不到该进程的执行文件相关的知识,希望对你有一定的参考价值。

服务器是阿里云的 用来部署tomcat redis openfire nginx的并没有用到httpd,可是服务器运行了一段时间之后突然出现了httpd的进程 ,而且cpu占用100%导致服务器无法正常使用,httpd 的文件是在/tmp/httpd下 删除了还是会自动生成,httpd的进程也是一样,无法删除,有老哥遇到过同样的问题嘛 ,帮帮小弟

参考技术A 看看有没有守护进程
另外有可能是自启动,如果是init方式自启动,则杀死后会重新启动服务,用命令停掉服务即可 service httpd stop ,如果不需要的话可以选择关闭自启动

Linux shell 脚本 实现查询出进程的名字,cup内存占用率,启动时间在线状态等格式化输出

目的是查询出进程的名字,cup内存占用率,启动时间在线状态等格式化输出

脚本实现的结果:
[root@zabbix ~]# sh /app/shell/app_status.sh
ProcessName---------GroupName-------Status-----PID----CPU----MEMORY----StarTime---
nginx WEB STOPED NULL NULL NULL NULL
httpd WEB STOPED NULL NULL NULL NULL
mysql DB RUNNING 3019 0.2 24.1 Wed Sep 11 12:02:21 2019
oracle DB STOPED NULL NULL NULL NULL
[root@zabbix ~]# sh /app/shell/app_status.sh nginx
ProcessName---------GroupName-------Status-----PID----CPU----MEMORY----StarTime---
nginx WEB RUNNING 4262 0.0 0.1 Wed Sep 11 12:18:19 2019
nginx WEB RUNNING 4263 0.0 0.1 Wed Sep 11 12:18:19 2019

脚本使用的配置文件存放路径:/app/shell/process.cfg
process.cfg的内容

[GROUP_LIST]
WEB
DB
HADOOP
YUM

[WEB]
nginx
httpd

[DB]
mysql
oracle
postgresql

[HADOOP]
datanode
namenode
journalnode

[YUM]
resourcemanager
nodemanager

脚本内容:
#!/bin/bash
#
#Func:Get Porcess Status IN process.cfg

#Define Variables
HOME_DIR="/app/shell/"
CONFIG_FILE="process.cfg"
this_pid=$$
#
#get_all_goup:得到组的成员
#该函数无需输入参数,返回配置配置文件 process.cfg中所有的组信息,如WEB ,DB等
#

function get_all_group

G_LIST=sed -n "/\[GROUP_LIST\]/,/\[.*\]/p" $HOME_DIR/$CONFIG_FILE|egrep -v "(^$|\[.*\])"
echo "$G_LIST"

#get_all_process
#该函数无需输入任何参数,返回配置文件process.cfg中所有进程信息
#
function get_all_process

for g in get_all_group
do
P_LIST=sed -n "/\[$g\]/,/\[.*\]/p" $HOME_DIR/$CONFIG_FILE |egrep -v "(^$|\[.*\])"
echo "$P_LIST"
done

#get_process_pid_by_name
#该函数接收一个参数,参数是进程名,返回的是一个进程PID的列表,可能是一个或是多个
#
function get_process_pid_by_name

if [ $# -ne 1 ];then
return 1
else
pids=ps -ef | grep $1 | egrep -v grep|grep -v $0 | awk ‘print $2‘
echo $pids
fi

#get_process_info_by_pid
#该函数是接收一个参数,参数进程PID;返回值是一进程运行信息的列表,其包含CPU 占用率 内存
#
function get_process_info_by_pid

if [ ps -ef | awk -v pid=$1 ‘$2==pidprint ‘ | wc -l -eq 1 ];then
pro_status="RUNNING"
else
pro_status="STOPED"
fi
pro_cpu=ps aux | awk -v pid=$1 ‘$2==pidprint $3‘
pro_mem=ps aux | awk -v pid=$1 ‘$2==pidprint $4‘
pro_start_time=ps -p $1 -o lstart | grep -v STARTED
#echo "$pro_status $pro_cpu $pro_mem "$pro_start_time" "

#is_group_in_config
#该函数接收一个参数,参数为组的名称;返回是0或1;0代表该组在配置文件中,1代表不在
#
function is_group_in_config

for gn in get_all_group;do
if [ "$gn" == "$1" ];then
return
fi
done
echo "Group $1 is not in process.cfg"
return 1

#is_process_in_config
#该函数接收一个参数,参数为组名;返回值是对应组内所有进程名名称列表
#
function is_process_in_config

for pn in get_all_process;do
if [ $pn == $1 ];then
return
fi
done

#get_all_process_by_group
#该函数接收一个参数,参数为组的名称传给is_group_in_config返回的0列出该组内所有进程名
#
function get_all_process_by_group

is_group_in_config $1
if [ $? -eq 0 ];then
p_list=sed -n "/\[$1\]/,/\[.*\]/p" $HOME_DIR/$CONFIG_FILE | egrep -v "(^$|^#|\[.*\])"
echo $p_list
else
echo "GroupName $1 is not in process.cfg"
fi

#get_group_by_process_name
#该函数接收一个参数,参数名是进程名;调用get_all_group得到组,get_all_process_by_group $gn;判断是否在这个组内;若在到组名称
#
function get_group_by_process_name

for gn in get_all_group;do
for pn in get_all_process_by_group $gn;do
if [ $pn == $1 ];then
echo "$gn"
fi
done
done

#format_print
#该函数接收一个参数;参数是进程名,显示进程的ProcessName---------","GroupName-------","Status-----","PID----","CPU----","MEMORY----","StarTime---
#
function format_print

ps -ef | grep $1 | grep -v grep | grep -v $this_pid &> /dev/null
if [ $? -eq 0 ];then
pids=get_process_pid_by_name $1
for pid in $pids;do
get_process_info_by_pid $pid
awk -v name=$1 \
-v g_name=$2 \
-v status=$pro_status \
-v pid=$pid \
-v cpu=$pro_cpu \
-v mem=$pro_mem \
-v start_time="$pro_start_time" \
‘BEGINprintf "%-20s%-16s%-11s%-7s%-7s%-10s%-20s\n",name,g_name,status,pid,cpu,mem,start_time‘
done
else
awk -v name=$1 -v g_name=$2 ‘BEGINprintf "%-20s%-16s%-11s%-7s%-7s%-10s%-20s\n",name,name,"STOPED","NULL","NULL","NULL","NULL"‘
fi

##
##
if [ ! -e $HOME_DIR/$CONFIG_FILE ];then
echo "$CONFIG_FILE is not exist..please check.."
exit 1
fi
##
##
awk ‘BEGINprintf "%-20s%-16s%-10s%-6s%-7s%-10s%-20s\n","ProcessName---------","GroupName-------","Status-----","PID----","CPU----","MEMORY----","StarTime---"‘
##
##
if [ $# -gt 0 ];then
if [ "$1" == "-g" ];then
shift
for gn in $@;do
is_group_in_config $gn || continue
for pn in get_all_process_by_group $gn;do
is_process_in_config $pn && format_print $pn $gn
done
done
else
for pn in $@;do
gn=get_group_by_process_name $pn
is_process_in_config $pn && format_print $pn $gn
done
fi
else
for pn in get_all_process;do
gn=get_group_by_process_name $pn
is_process_in_config $pn && format_print $pn $gn
done
fi
[root@zabbix ~]#

以上是关于linux下httpd进程cup 100% kill了进程还是自动重启,/proc/pid/exe也找不到该进程的执行文件的主要内容,如果未能解决你的问题,请参考以下文章

apache服务器httpd.exe进程占用cpu100%

Linux下怎么查看某个守护进程或者所有的守护进程?

Linux shell 脚本 实现查询出进程的名字,cup内存占用率,启动时间在线状态等格式化输出

linux记录一次系统被攻击的处理过程

linux 系统下oracle 10G perl进程cpu占用100% ,这个进程有啥用?能关掉吗?会不会有啥影响?

Linux命令