We are running a field specific middle tier application server on HP-UX. We've recently been experiencing performance problems with it and the database back end (Oracle on a separate HP-UX box). We resolved a few issues on the DB server (some kernel parameters to free up RAM that was extremely overutilized for the vxfs buffer cache) and it seems to be able to handle the load again. But as soon as that was resolved the problems that we saw on the middle tier came back.
Currently we're involved in a finger pointing battle with the company that makes the application server, HP and Oracle. Personally I believe the fault lies with the middle tier. We had someone from HP come in on a time and materials basis to analyze our DB and middle tier system and he said things look good in terms of the OS. Further investigation of performance data indicated that the third heaviest CPU and RAM eating process was a short script that the application server launches hundreds to thousands of times per minute. It seems like that process is intended to set some environment variables for it's child processes and nothing more. This seems like gross inefficiency to us. But we need to be able to figure out what process(es) spawn this script's process.
I found: 'UNIX95=1 ps -Hef' in order to see a rough process tree. (There isn't a port of 'pstree' from Linux is there?) But, we've discovered that the script processes never show up in our 'ps' or 'top' commands. However, the performance data gathered by HP's scripts (and Glance I think) seemed to keep track of those processes. My supervisor believes that the problem is that 'ps' and 'top' only get a snapshot of current activity and the script process is too quick to be captured. I'm not sure if that's true or not, but it seems unlikely.
So my questions are:
1. Is there a way to control how short of a period of time that 'ps' can see?
2. Is it possible that 'ps' and 'top' can't display processes that are "too short"?
Upon further inspection it appears that the we're dealing with a PA-RISC executable and not a script. There is a wrapper script that calls the executable. And it looks like the executable is what we want to find in the 'ps' output. They both have names that start with 'get'. But 'ps -ef | grep get' never finds any processes that match.
Is 'pstat' a command on it's own? All I found were the HP-UX function libraries in the man pages. Or are you saying we might need to build our own 'ps' command?
Quote:
Originally Posted by jim mcnamara
Is it possible to modify the shell script instead? add some small instrumentation feature to it like $PPID? So you can track it in a log file?
Look into doing something with pstat if you need a "fast" ps command. You'll have to run it with slightly elevated priority..
I have to leave now (kids waiting...)
So I drop note I made in 2003 for you to read and see if it help understanding:
Bill Hassell:
Unix memory usage is a very complex process. As you mentioned, shared memory is difficult to
assign to a given process, and considering the number of different ways a process may be st
arted (cron, rpc, network client/server tasks, threads), accurately assigning memory to a si
ngle user is virtually impossible. For given user ID, you can get a rough idea (which is lik
ely all that you need) by using ps:
UNIX95= ps -u joan -o vsz,ruser,pid,args |sort -rn
This shows all processes owned by the real user joan, showing the virtual size in Kbytes in
descending order.
Mike Stroyan:
The pstat_procvm function can give you all the information you need to do that. The attached program uses a reference count of the number of processes that map each region. It recognizes unique regions by a combination of their vm.pst_space and vm.pst_vaddr.
It divides the credited size of a region by the reference count. If three processes share a memory segment then they each get billed for one third of its size. You can run the program
with either user ids or user names to look for.
The ps command is really naive about process size. It reports only the total size of text, data, and stack. It completely misses mmap, shared memory and shared libraries.
To answer your questions, yes it is possible for short-lived processes to never show up. In fact it is very unlikely that a short lived process will show up in ps or top. Those programs read the process table with techniques that are almost as fast as a memory to memory data move. Once they have this snapshot, they prepare a report. top repeats this every n seconds, but top presents you with a program...it does not want to show all processes, just the "top" ones. You have a better shot with ps. A short-lived process can be gone in well under a tenth of a second.... let's say that yours is lasting exactly one tenth of a second... That means that ps must capture a process table snapshot sometime during that tenth of a second. This is very hard to arrange in a reliable fashion. A very clever wrapper program that runs both ps and your program nearly simultaneously might be able to do it.
But if the program shows up in glance but not ps/top, I tend to suspect something else. It could be that the program is destroying it's command line. You might try: ps -el and see if it shows up.
Hello, on my openvz server, i can output load averages of containers:
Code:
# vzlist -o laverage,ctid -H
0.00/0.00/0.00 130
0.10/0.10/0.10 150
2.26/2.28/2.28 190please which command/script to use so it outputs top 1 or 2 processes on the linux system with 2.26 laverage?
i mean, i want... (1 Reply)
I wanted to know how to find the memory taken by a process using top command. The output of the top command is as follows as an example:
Mem: 13333364k total, 13238904k used, 94460k free, 623640k buffers
Swap: 25165816k total, 112k used, 25165704k free, 4572904k cached
PID USER ... (6 Replies)
i have edited a script to kill an exact mysql process is causing the high load on the server, my problem is, kill dont kill it!
script:
#!/bin/sh
top -n 1 -u mysql | grep mysqld | awk '{print $1}' > pid
proc='cat pid'
kill -9 $proc
or i try with
kill -9 `top -n 1 -u mysql | grep mysqld... (8 Replies)
Hi,
I have written a script to monitor a Process with the help of top command. This is my script.
======================
#!/bin/sh
DATE=`date +%Y%m%d%H%M%S`
HOME=/home/xmp/testing/xmp_report
RADIUS_PID=`xms -xmp sh pr | grep "RADIUS.iamsp02ldv" |awk '{ print $3 }'`
PSE_PID=`xms -xmp sh... (5 Replies)
Hi,
top process is shows like this in solaris server oracle 8i running:
load averages: 5.01, 3.35, 2.82 18:24:45
344 processes: 332 sleeping, 5 running, 2 stopped, 5 on cpu
CPU states: 22.2% idle, 29.6% user, 14.7% kernel, 33.5% iowait, 0.0% swap... (3 Replies)
Hi, what I want to do is get the SIZE of a particular process from top into a shell script so I can put it in a while loop. I want to display a warning message when the process size gets up to a certain amount, but I don't know how to get that one line spit out from Top and thrown into my shell... (5 Replies)
Hi,
I have an oracle process running on top for a week now, but I couldnt see the same process with in oracle. how do I know what this process is?
-GK
P.S: when I say i didn't see within oracle, what I mean is I didn't see this process through oracle utility which shows all the oracle process (1 Reply)
When I run the top command, it shows 1 process as being Stopped. This is not a zombie, but simply a stopped process. Unfortunately, I can't figure out how to tell which process this is, nor why it is in a stopped state? Any way of finding this out? (7 Replies)