分类:
2007-07-04 22:43:26
Publisher: Prentice Hall PTR
Pub Date:
ISBN: 0-13-149247-0
Pages: 456
Date:
Chpt.5. System Information (/proc)
> What is proc?
The /proc file system isn’t a real file system on hard disk. It’s a reflection of the system in the memory and an interface to the kernel. Many tools such as vmstat, ps, iostat and so on get information from the /proc file system. Also you can modify some parameters of the running kernel from the /proc file system.
> Mapping of /proc
I wrote a tool to read some parts of the /proc file system. I skipped this section. It is no use to write down the entries of each file here. But remember, the /proc of Linux is much better than Solaris.
Chpt.6. System Tools
> Processes
The maximum number of processes/threads can be created in a system is limited by memory. It is set up in /usr/src/linux-2.6.x/kernel/fork.c in fork_init().
max_threads = mempages / (THREAD_SIZE/PAGE_SIZE) / 8;
You can modify this number on-the-fly by the /proc file system like this:
# echo xxx > /proc/sys/kernel/threads-max
> Task States
Processes are managed by the kernel in this structure-- task_struct, which is defined in the /usr/src/linux-2.6.x/include/linux/sched.h. In this file, also six task states are defined:
TASK_RUNNING -- The process is in the run queue(Maybe running or waiting to be executed.)
TASK_INTERRUPTIBLE -- The process is suspended, waiting for a signal or resource.
TASK_UNINTERRUPTIBLE -- The process is waiting for a resource. It is in the same "wait queue" as the TASK_INTERRUPTIBLE state, except that delivering a signal to the sleeping process leaves its state unchanged. This process state is seldom used. However, it is valuable under certain specific conditions in which a process must wait until a given event occurs without being interrupted.
TASK_STOPPED -- The process is being debugged.
TASK_ZOMBIE -- The process child is without a parent. Process execution is terminated, but the parent process has not yet issued a wait().
TASK_DEAD -- The process is dying.
> Tools for Working with Processes
Four useful commands: ps, pgrep, pstree, top.
E.g. To show the system calls currently being executed: ps -eo pid,%cpu,vsz,args,wchan
> strace Traces System Calls
The commond "strace" can get system calls(args, return value) + signals. For example,
#strace -o output "command"
or the output will be written to stderr without the option -o.
If you think it is a system call fails in your application, strace should be very useful.
> The Magic Key Sequence Gets a Back Trace
Visit for more information.
If your Linux system is hanging but your keyboard is still functioning, these steps perform a back trace of the current running process and all processes using the magic key sequence:
1. The kernel that is running on the system must be built with CONFIG_MAGIC_SYS-REQ enabled. Do the following operations in text mode.
2. Press Alt-ScrollLock followed by Ctrl-ScrollLock. These magic keystrokes give you a stack trace of the currently running processes and all processes, respectively.
3. Look in the system's /var/log/messages file for the back trace. If everything is set up correctly, the system should have converted the symbolic kernel addresses.
> lsof Lists Open Files -- list open files
> Network Debugging Tools
# ifconfig
# arp
# tcpdump
# netstat –an / -tap
ethereal (A GUI tool)