====== Identify Cpu Memory Intensive Processes Adjust Process Priority With Renice And Kill Processes ====== **General Information** Process wrangling. Get em cow-poke and watch out for zombies. ---- ===== Identify CPU/memory intensive processes ===== ==== pgrep ==== Grep for processes and return the PID. \\ Search processes for httpd pgrep httpd -l * Returns PID (default) and name (-l) \\ Search for all processes being run by the user called "user" pgrep -u user -l \\ All processes not owned by the root user pgrep -v -u root -l ---- ==== ps ==== All processes, user defined display options ps -eo pid,comm,nice * -e => every (all) processes * -o => user defined format \\ GNU Style Options ps -elf * -e => every (all) processes * -l => long format * -f => full format listing (adds STIME column and displays CMDs full paths) \\ BSD Style Options ps aux * a => eliminate the "only yourself" restriction * u => display user oriented format * x => eliminate the "must have tty" restriction ---- ==== system load ==== Load average * percentage of processing power used * Number of CPUs is important \\ Get the number of CPUs grep -c proc /proc/cpuinfo * -c => count of matched lines * proc => the string searched for in /proc/cpuinfo \\ View load averages w OR uptime 17:03:49 up 2:02, 1 user, load average: 0.00, 0.01, 0.04 * shows the: last minute, last 5 mins, last 15 mins load * last min = 0%, last 5 mins = 1%, last 15 mins = 4% * If 2 cpus, a load average of 1.00 would be 50% CPU load. (1.00 / 2 = .50) * If 2 cpus, a load average of 2.00 would be 100% CPU load. (2.00 / 2 = 1.00) Percentage of total processing power in use = load average / (# of cpus) ---- ==== top ==== Open top top * Sorted by %cpu used by default \\ Interactive commands * z => toggle colors (easier to see highlighted columns) * x => highlight current sort column * 1 => expand CPU list to see individual usage * M => sort by %memory used * P => sort by %cpu used * < or > => change sort column * r => (renice) enter pid to renice, then nice level (selects top PID by default, can change) * k => (kill) enter pid, then signal to send (selects top PID by default, can change) \\ Start top with a screen update delay of 2 seconds top -d 2 * Default is update the display every 3 seconds ---- ===== adjust process priority with renice ===== Highest priority => -20 (the least nice to other processes)\\ Lowest priority => 19 (the most nice to other processes)\\ Default nice level if nice run, but level not specified => 10 \\ Start program with a nice level of 5 nice -n 5 httpd \\ Change nice level of a running process to -5 renice -n -5 2879 \\ Change nice level of all running httpd processes to -10 renice -n -10 $(pgrep httpd) ---- ===== kill processes ===== List kill signals kill -l * 1 (SIGHUP) => hang up, similar to closing a terminal window * 2 (SIGINT) => keyboard interrupt (ctrl+c) * 3 (SIGQUIT) => ask process to quit * 9 (SIGKILL) => Kill process immediately, not blockable * 15 (SIGTERM) => Asks process to terminate cleanly. Default when nothing passed. * 18 (SIGCONT) => continue process that was stopped * 19 (SIGSTOP) => stop the process, not ignorable * 20 (SIGTSTP) => stop that can be ignored \\ Kill process by name (instead of PID) pkill httpd * Kills all process ids named httpd, sending signal 15 (SIGTERM) \\ Remove a user's ssh session (kick user off system) pkill -u rjones sshd \\ Kill all processes started from a specific terminal pkill -t pts/1 * This does NOT kick them off the system, only kills their running programs started from that session. \\ Stop a process that is job #1 kill -SIGSTOP %1 * Alt command: kill -19 %1 \\ Contine the process that is job #1 kill -SIGCONT %1 * Alt command: kill -18 %1 \\ Kill an individual process with PID 2594 kill -SIGKILL 2594 * Alt command: kill -9 2594 ----