Optimize and Speedup the script


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Optimize and Speedup the script
# 1  
Old 02-18-2010
Optimize and Speedup the script

Hi All,

There is a script (test.sh) which is taking more CPU usage. I am attaching the script in this thread.

Could anybody please help me out to optimize the script in a better way.

Thanks,
Gobinath
# 2  
Old 02-18-2010
I tried to get this script as much as can, but since the logfile is also somehow contains more info, it's started utilize the CPU more. Anybody thru some light to resolve this issue to reduce the overburden the CPU.

Here is a script:

Code:
#!/bin/sh

MON_NAME=$1
pcmon="/tmp/pcmon"
CMD="cat"
OPTION="-option"
DIR=$2 # complete path of directory [Absolute Path]
FILE_PAT=$3 # File Pattern
value=`date |cut -c12-13`
print "$value"
extension=`date |cut -c15-16`
print "$extension"
SEARCH_NAME=$DIR/$FILE_PAT
STATUS=0

CMD_OUTPUT=`cat $SEARCH_NAME | grep -i "$4" | wc -l`
echo "$CMD_OUTPUT"
OPTION_APP_NAME="PROCNAME=$CMD_OUTPUT"
case $4 in  "Too many open files")  
STATUS=0       
       if [ $value -eq 11 ] || [ $value -eq 15 ]
        then 
              if [ $CMD_OUTPUT -gt 500 ]
                then
                   if [ $extension -lt 12 ]
                     then
                       STATUS=1 
                   fi
              fi
        fi
        echo "$pcmon $MON_NAME=$STATUS $OPTION $OPTION_APP_NAME"
        $pcmon $MON_NAME=$STATUS $OPTION $OPTION_APP_NAME
        ;;
        "ERR_REASON:255")   
        if [ $CMD_OUTPUT -gt 500 ]
        then
                STATUS=1
        fi
        echo "$pcmon $MON_NAME=$STATUS $OPTION $OPTION_APP_NAME"
        $pcmon $MON_NAME=$STATUS $OPTION $OPTION_APP_NAME
       ;;
       "ERR_REASON:20")
        if [ $CMD_OUTPUT -gt 500 ]
        then
                STATUS=1
        fi
        echo "$pcmon $MON_NAME=$STATUS $OPTION $OPTION_APP_NAME"
        $pcmon $MON_NAME=$STATUS $OPTION $OPTION_APP_NAME
       ;;
        "ERR_REASON:8#")  
        if [ $CMD_OUTPUT -gt 10 ]
        then
                STATUS=1
        fi
        echo "$pcmon $MON_NAME=$STATUS $OPTION $OPTION_APP_NAME"
        $pcmon $MON_NAME=$STATUS $OPTION $OPTION_APP_NAME
            ;;
         "ERR_REASON:88")
        if [ $CMD_OUTPUT -gt 100 ]
        then
                STATUS=1
        fi
        echo "$pcmon $MON_NAME=$STATUS $OPTION $OPTION_APP_NAME"
        $pcmon $MON_NAME=$STATUS $OPTION $OPTION_APP_NAME
           ;;
              "ERR_REASON:10")
           STATUS=0 
         if [ $value -eq 23 ] && [ $extension -lt 55 ]
         then
                       if [ $CMD_OUTPUT -gt 1 ]
                          then
                             STATUS=1
                      fi
        fi 
        echo "$pcmon $MON_NAME=$STATUS $OPTION $OPTION_APP_NAME"
        $pcmon $MON_NAME=$STATUS $OPTION $OPTION_APP_NAME
       
                  ;;
            "ERR_REASON:11")
              STATUS=0 
         if [ $value -eq 23 ] && [ $extension -lt 55 ]
         then
                      if [ $CMD_OUTPUT -gt 1 ]
                          then
                              STATUS=1
                       fi
           fi
        echo "$pcmon $MON_NAME=$STATUS $OPTION $OPTION_APP_NAME"
        $pcmon $MON_NAME=$STATUS $OPTION $OPTION_APP_NAME
           ;;
          "ERR_REASON:2")
           STATUS=0
        if [ $value -eq 23 ] && [ $extension -lt 55 ]
         then
                   if [ $CMD_OUTPUT -gt 1 ]
                   then
                       STATUS=1
                    fi
        fi
        echo "$pcmon $MON_NAME=$STATUS $OPTION $OPTION_APP_NAME"
        $pcmon $MON_NAME=$STATUS $OPTION $OPTION_APP_NAME
              ;;
           "ERR_REASON:3")
       STATUS=0 
        if [ $value -eq 23 ] && [ $extension -lt 55 ]
         then
                    if [ $CMD_OUTPUT -gt 1 ]
                    then
                          STATUS=1
                    fi
       fi
        echo "$pcmon $MON_NAME=$STATUS $OPTION $OPTION_APP_NAME"
        $pcmon $MON_NAME=$STATUS $OPTION $OPTION_APP_NAME
esac
exit;



Anybody pls help me on this script....

Last edited by Franklin52; 02-18-2010 at 07:39 AM.. Reason: Added the script on the page itself.
# 3  
Old 02-18-2010
Oddities picked up visually.

Code:
This block of the case statement has no terminating ";;" .
"ERR_REASON:3")

Code:
A line should never end with a semi-colon.
exit;
should be
exit

Code:
What is in this file which you are trying to execute in several places in the script?
pcmon="/tmp/pcmon"

# 4  
Old 02-18-2010
Without reading the code very much, I noticed you have a whole bunch of if/then statements operating on a single variable: probably a better choice would be to use a switch/case operator.
# 5  
Old 02-18-2010
@kodak
The script is mostly a case statement but is badlly laid out such that this is not easy to follow.

Code:
case $4 in  "Too many open files")  

thru

esac

# 6  
Old 02-18-2010
Thank you very much methyl, kodak.

pcmon is a script that will send information to monitoring system.

Could you please clarify somne of dobuts:

1. What happen if I not close case statement?

2. How could I avoid so many if then loops and make my script more optimize?

3. As you said "The script is mostly a case statement but is badlly laid out ", pls let me know can make this one is as good as compared to the old one?

Thanks,
Gobinathan.S

---------- Post updated at 09:21 PM ---------- Previous update was at 09:09 PM ----------

Also, Is it possible to use the statement as below or suggest me the way to go in a good way

Instead of using like:
Code:
case $4 in "Too many open files") 
STATUS=0 
if [ $value -eq 11 ] || [ $value -eq 15 ] then 
if [ $CMD_OUTPUT -gt 500 ]
then
if [ $extension -lt 12 ]
then
STATUS=1 
fi
fi
fi

Can I use:
Code:
if (( ( $value -eq 11 || $value -eq 15 ) && ( $CMD_OUTPUT -gt 500 ) && ( $extension -lt 12 ) )) then;
STATUS=1

Is this a good way of doing it, will it optimize my requirement.

Last edited by Scott; 02-18-2010 at 01:01 PM.. Reason: Code tags please...
# 7  
Old 02-18-2010
If in doubt correct all syntax errors even if the shell didn't spot them. You can get really strange effects.


On the performance front it would help to see how you are calling the script and in particular whether $3 contains wildcards. The only line which could be appreciably slow is the line which counts the records which match $4.
How big are your input file(s) - size and number of records ?
How many input files are there?

Do you call the script 9 times (once for every case statement) with different parameters? This could be the performance problem if every input file is searched 9 times for every run set of the script. If the input files are large it may be better to select all the records which interest you in one pass and then work on that subset.

How often do you run the script? Is it run from the command line, a control script, or from cron?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Help Optimize the Script Further

Hi All, I have written a new script to check for DB space and size of dump log file before it can be imported into a Oracle DB. I'm relatively new to shell scripting. Please help me optimize this script further. (0 Replies)
Discussion started by: narayanv
0 Replies

2. Shell Programming and Scripting

Optimize shell script to run faster

data.file: contact { contact_name=royce-rolls modified_attributes=0 modified_host_attributes=0 modified_service_attributes=0 host_notification_period=24x7 service_notification_period=24x7 last_host_notification=0 last_service_notification=0 host_notifications_enabled=1... (8 Replies)
Discussion started by: SkySmart
8 Replies

3. Shell Programming and Scripting

Optimize my mv script

Hello, I'm wondering if there is a quicker way of doing this. Here is my mv script. d=/conversion/program/out cd $d ls $d > /home/tempuser/$$tmp while read line ; do a=`echo $line|cut -c1-5|sed "s/_//g"` b=`echo $line|cut -c16-21` if ;then mkdir... (13 Replies)
Discussion started by: whegra
13 Replies

4. Shell Programming and Scripting

Delete unique rows - optimize script

Hi all, I have the following input - the unique row key is 1st column cat file.txt A response C request C response D request C request C response E request The desired output should be C request (7 Replies)
Discussion started by: varu0612
7 Replies

5. UNIX for Dummies Questions & Answers

optimize if block : shell script

Hi, I need a shell script to determine if a no. is either even, greater than 4, less than 8 SHELL : ksh OS : RHEL 6 this is the if block of the script mod=`expr $num % 2` if || || then echo "No. is either even or greater than 4 or less than 8" fi this code works... (2 Replies)
Discussion started by: sam05121988
2 Replies

6. Shell Programming and Scripting

Can someone please help me optimize my code (script searches subdirectories)?

Here is my code. What it does is it reads an input file (input.txt which contains roughly 2,000 search phrases) and searches a directory for files that contains the search phrase. The directory contains roughly 1900 files and 84 subdirectories. The output is a file (output.txt) that shows only the... (23 Replies)
Discussion started by: jl487
23 Replies

7. Emergency UNIX and Linux Support

Help to optimize script running time

Dear Forum experts I have the below script which I made to run under bash shell, it runs perfectly for low records number, let us say like 100000. when I put all records (3,000,000), it's takes hours can you please suggest anything to optimize or to run in different way :-| {OFS="|";... (6 Replies)
Discussion started by: yahyaaa
6 Replies

8. UNIX for Dummies Questions & Answers

optimize shell script (snapshots)

I've a script to do some snapshots but the time it does so is very different... once i got a snapshot under 1 sec, on the other hand it took 3 sec, but nothing else changed, i didnt even move the cursor or something. I put the script on a ramdisk and its faster, but still swing from under 1... (1 Reply)
Discussion started by: mcW
1 Replies

9. UNIX for Dummies Questions & Answers

Can we optimize this simple script ?

Hi All , I am just a new bie in Unix/Linux . With help of tips from 'here and there' , I just created a simple script to 1. declare one array and some global variables 2. read the schema names from user (user input) and want2proceed flag 3. if user want to proceed , keep reading user... (8 Replies)
Discussion started by: rajavu
8 Replies

10. Shell Programming and Scripting

optimize the script

Hi, I have this following script below. Its searching a log file for 2 string and if found then write the strings to success.txt and If not found write strings to failed.txt . if one found and not other...then write found to success.txt and not found to failed.txt. I want to optimize this... (3 Replies)
Discussion started by: amitrajvarma
3 Replies
Login or Register to Ask a Question