Issue/Symptom : Sometime you'll see semaphore usage is full.
■ OS Environment : Linux or RHEL
■ Software/Application : HP ovo sends semaphore usage alerts
■ Investigation : Unsed semaphores are not cleared by kernel
■ Workaround Solution : Use below scripts to clean unused semaphore.
■ OS Environment : Linux or RHEL
■ Software/Application : HP ovo sends semaphore usage alerts
■ Investigation : Unsed semaphores are not cleared by kernel
■ Workaround Solution : Use below scripts to clean unused semaphore.
cat clean-unused-semaprhore.sh
#Developed By Kamal maiti,
#check if root can run it.
if [[ $EUID -ne 0 ]]; then
exit 1
else
#collect all semaphore ID
for SEMID in `ipcs -s|egrep -v -e "Semaphore|key"|sed '/^$/d'|awk '{print $2}'|sort -u`
do
#GETPID of semaphore
PID=`ipcs -s -i $SEMID|tail -2|head -1|awk '{print $NF}'`
#GET PROCESS ID
#Ignore process ID 0 which is main process & test PID greater than 0
if [ $PID -gt 0 ]; then
#Test of PID exists in process list, if exits then don't do anything.
if ps -p $PID > /dev/null
then
#running process are
echo "$SEMID $PID" &>/dev/null else
# dead process are, kill corresponding semaphore of related PID is not exisitng.
echo "$SEMID $PID" &>/dev/null
#cleaning semaphore of dead process :
ipcrm -s $SEMID
fi
fi
done
fi
RUN :chmod +x clean-unused-semaprhore.sh; ./clean-unused-semaprhore.sh
+ [[ 514 -ne 514 ]]
ReplyDelete++ ipcs -s
++ egrep -v -e 'Semaphore|key'
++ sed '/^$/d'
++ awk '{print $2}'
++ sort -u
+ for SEMID in '`ipcs -s|egrep -v -e "Semaphore|key"|sed '\''/^$/d'\''|awk '\''{print $2}'\''|sort -u`'
++ ipcs -s -i 131074
++ tail -2
++ head -1
++ awk '{print $NF}'
+ PID=13193
+ '[' 13193 -gt 0 ']'
+ ps -p 13193
+ for SEMID in '`ipcs -s|egrep -v -e "Semaphore|key"|sed '\''/^$/d'\''|awk '\''{print $2}'\''|sort -u`'
++ ipcs -s -i 196612
++ tail -2
++ head -1
++ awk '{print $NF}'
+ PID=15772
+ '[' 15772 -gt 0 ']'
+ ps -p 15772
+ for SEMID in '`ipcs -s|egrep -v -e "Semaphore|key"|sed '\''/^$/d'\''|awk '\''{print $2}'\''|sort -u`'
++ ipcs -s -i 229381
++ tail -2
++ head -1
++ awk '{print $NF}'
+ PID=21180
+ '[' 21180 -gt 0 ']'
+ ps -p 21180
+ set +x
I used the script but its executing till ps -p and ending.... i want to know whether this is functioning as desired.
ReplyDelete