linux状态及原理全剖析
来源:互联网 发布:mac telnet连接 编辑:程序博客网 时间:2024/06/06 18:20
1 0
- linux状态及原理全剖析
- linux状态及原理全剖析
- linux状态及原理全剖析
- SQL报错型盲注教程(原理全剖析)
- linux共享内存原理剖析
- 详细剖析Linux睡眠休眠状态
- Master原理剖析与源码分析:Master状态改变处理机制原理剖析与源码分析
- Spark2.2 Worker原理剖析图解及源码剖析
- NAT类型及转换原理深入剖析
- NAT类型及转换原理深入剖析
- NAT类型及转换原理深入剖析
- RSA简介及深入浅出的剖析原理
- PageRank算法原理剖析及Spark实现
- Shiro系统权限管理、及原理剖析
- xargs的原理剖析及用法详解
- 深度剖析fork()的原理及用法
- PageHelper分页插件源码及原理剖析
- 微信小程序剖析 | 运行机制及框架原理
- 王垠Linux长篇论
- 去掉VSS代码控制
- Android Handler Message总结
- 1011. A+B和C (15)
- ubuntu 安装jdk
- linux状态及原理全剖析
- oracle sql查询大全
- 反转链表
- 多功能采集模块——iPotest-PLV107
- codeforces 580D. Kefa and Dishes dp
- 1012. 数字分类 (20)
- 谷歌官方Gradle文档
- Git基本命令和GitFlow工作流
- 火云开发课堂 - 《Shader从入门到精通》系列 第十节:在Shader中实现模糊滤镜
linux
Table of Contents
1 linux
1.1 proc filesystem
1.1.1 /proc
1.1.1.1 /proc/meminfo
系统中关于当前内存的利用状况等的信息,常由free命令使用;可以使用文件查看命令直接读取此文件,其内容显示为两列,前者为统计属性,后者为对应的值;
1.1.1.2 /proc/stat
实时追踪自系统上次启动以来的多种统计信息;如下所示,其中,
1.1.1.3 /proc/swaps
当前系统上的交换分区及其空间利用信息,如果有多个交换分区的话,则会每个交换分区的信息分别存储于/proc/swap目录中的单独文件中,而其优先级数字越低,被使用到的可能性越大;
1.1.1.4 /proc/cmdline
在启动时传递至内核的相关参数信息,这些信息通常由lilo或grub等启动管理工具进行传递;
1.1.1.5 /proc/uptime
系统上次启动以来的运行时间,如下所示,其第一个数字表示系统运行时间,第二个数字表示系统空闲时间,单位是秒;系统上次启动以来的运行时间,如下所示,其第一个数字表示系统运行时间,第二个数字表示系统空闲时间,单位是秒;
1.1.1.6 /proc/version
当前系统运行的内核版本号
1.1.1.7 /proc/mounts
系统当前挂载的所有文件系统.第一列表示挂载的设备,第二列表示在当前目录树中的挂载点,第三点表示当前文件系统的类型,第四列表示挂载属性(ro或者rw),第五列和第六列用来匹配/etc/mtab文件中的转储(dump)属性;
1.1.1.8 /proc/modules
当前装入内核的所有模块名称列表,可以由lsmod命令使用,也可以直接查看;如下所示,其中第一列表示模块名,第二列表示此模块占用内存空间大小,第三列表示此模块有多少实例被装入,第四列表示此模块依赖于其它哪些模块,第五列表示此模块的装载状态(Live:已经装入;Loading:正在装入;Unloading:正在卸载),第六列表示此模块在内核内存(kernel memory)中的偏移量;
1.1.1.9 /proc/diskstats
每块磁盘设备的磁盘I/O统计信息列表
1.1.1.10 /proc/cpuinfo
1.1.1.11 /proc/crypto
系统上已安装的内核使用的密码算法及每个算法的详细信息列表
1.1.1.12 /proc/loadavg
保存关于CPU和磁盘I/O的负载平均值,其前三列分别表示每1秒钟、每5秒钟及每15秒的负载平均值,类似于uptime命令输出的相关信息;第四列是由斜线隔开的两个数值,前者表示当前正由内核调度的实体(进程和线程)的数目,后者表示系统当前存活的内核调度实体的数目;第五列表示此文件被查看前最近一个由内核创建的进程的PID.
1.1.1.13 /proc/locks
保存当前由内核锁定的文件的相关信息,包含内核内部的调试数据;每个锁定占据一行,且具有一个惟一的编号;如下输出信息中每行的第二列表示当前锁定使用的锁定类别,POSIX表示目前较新类型的文件锁,由lockf系统调用产生,FLOCK是传统的UNIX文件锁,由flock系统调用产生;第三列也通常由两种类型,ADVISORY表示不允许其他用户锁定此文件,但允许读取,MANDATORY表示此文件锁定期间不允许其他用户任何形式的访问;
1.1.1.14 /proc/slabinfo
在内核中频繁使用的对象(如inode、dentry等)都有自己的cache,即slab pool,而/proc/slabinfo文件列出了这些对象相关slap的信息;详情可以参见内核文档中slapinfo的手册页;
1.1.1.15 /proc/vmstat
当前系统虚拟内存的多种统计数据,信息量可能会比较大,这因系统而有所不同,可读性较好;
1.1.1.16 /proc/zoneinfo
内存区域(zone)的详细信息列表
1.1.2proc/<pid>
其中pid为对应的进程号,目录下面就是这个进程对应的信息。
1.1.2.1 fd
todo(zhangyan04):
1.1.2.2 io
TODO:
1.1.2.3 limits
TODO:
1.1.2.4 maps
当前进程关联到的每个可执行文件和库文件在内存中的映射区域及其访问权限所组成的列表
1.1.2.5 mount
TODO:
1.1.2.6 net
todo(zhangyan04):
1.1.2.7 sched
todo(zhangyan04):
1.1.2.8 status
TODO:
1.1.2.9 statm
Provides information about memory usage, measured in pages. The columns are:
1.1.3 /proc/sys
在/proc/sys下面有一些可以动态修改的内核参数,有两种方式可以修改这些参数。
首先可以使用sysctl工具来进行修改。比如如果想修改sys/vm/swappiness==0的话,那么可以
上面修改方式是临时的,如果想进行永久修改的话可以修改/etc/sysctl.conf文件
然后重启那么这个设置就会永久生效。
1.1.4 /proc/sys/vm
1.1.4.1 /proc/sys/vm/overcommit_memory
所谓的overcommit是过量使用的意思。
下午将dp3的overcommit_memory参数修改成为2之后,首先出现的问题就是不能够再执行任何shell命令了,错误是fork can't allocate enough memory,就是fork没有那么多的内存可用。然后推出会话之后没有办法再登陆dp3了。这个主要是因为jvm应该基本上占用满了物理内存,而overcommit_ration=0.5,并且没有swap空间,所以没有办法allocate更多的memory了。
从/var/log/syslog里面可以看到,修改了这个参数之后,很多程序受到影响(ganglia挂掉了,cron不能够fork出进程了,init也不能够分配出更多的tty,导致我们没有办法登陆上去)在ganglia里面看到内存以及CPU使用都是一条直线,不是因为系统稳定而是因为gmond挂掉了。
而在hadoop的datanode日志里面,有下面这些错误(只是给出部分exception):
接着之后就一直打印下面日志hang住了
hdfs web页面上面显示dead node,但是实际上这个datanode进程还存活。原因估计也是因为不能够分配足够的内存出现这些问题的吧。
最后可以登陆上去的原因,我猜想应该是datanode挂掉了,上面的regionserver暂时没有分配内存所以有足够的内存空间,init可以开辟tty。
现在已经将这个值调整成为原来的值,也就是0。索性的是,在这个期间,这个修改对于线上的任务执行没有什么影响。
1.1.4.2 /proc/sys/vm/overcommit_ratio
如果overcommit_memory值为2的话,那么这个参数决定了系统的<可用内存>的大小。计算方式是 (Physical-RAM-Size) * ratio / 100 + (Swap-Size).
所以对于我这个系统来说,可用的虚拟内存在(491*50/100)+509=754M. note(dirlt):这个仅仅是在overcommit_memory=2的时候估算的<可用内存>大小, 实际上对于其他情况来说可用内存大小还是(Physical-RAM-Size) + (Swap-Size).
1.1.4.3 /proc/sys/vm/swappiness
这个参数决定系统使用swap的程度。但是这个参数并没有禁止使用swap分区,而只是一个依赖于swap分区的程度。 如果这个值设置成为0的话那么,那么系统会尽可能地将减少page swap in/out操作,将更多的内存操作于物理内存上面。
1.1.4.4 /proc/sys/vm/dirty_*
这几个参数主要是用来控制脏页刷回磁盘策略。关于脏页刷回磁盘的过程可以参看"文件IO/write"一节。
note(dirlt)@2013-05-25: 我copy了一份内容过来
对于这些脏页的写回策略是:
注意到这里可能启动pdflush daemon在后台刷新脏页。另外系统每隔dirty_writeback_centisecs时间会启动pdflush daemon将脏页刷到磁盘上面。而pdflush daemon工作方式是这样的,检查脏页是否存在超过dirty_expire_centisecs时间的,如果超过的话那么就会在后台刷新这些脏页。
1.1.4.5 /proc/sys/vm/drop_caches
可以用来释放kernel保存的buffers和cached memory,buffers保存的是目录以及文件的inode,cached memory保存的是操作文件时候使用的pagecache
为了防止数据丢失,可以在修改这个文件之前先调用sync强制写盘
1.1.4.6 /proc/sys/vm/panic_on_oom
This enables or disables panic on out-of-memory feature.
If this is set to 0, the kernel will kill some rogue process, called oom_killer. Usually, oom_killer can kill rogue processes and system will survive.
If this is set to 1, the kernel panics when out-of-memory happens. However, if a process limits using nodes by mempolicy/cpusets, and those nodes become memory exhaustion status, one process may be killed by oom-killer. No panic occurs in this case. Because other nodes' memory may be free. This means system total status may be not fatal yet.
If this is set to 2, the kernel panics compulsorily even on the above-mentioned.
The default value is 0. 1 and 2 are for failover of clustering. Please select either according to your policy of failover.
note(dirlt):对于1,2不是很理解,可能是用于分布式集群Linux系统上面的策略
1.1.5 /proc/sys/net
1.1.5.1 /proc/sys/net/ipv4/ip_local_port_range
本地port分配范围.
1.1.5.2 /proc/sys/net/ipv4/tcp_tw_reuse
重复使用处于TIME_WAIT的socket.
Allow to reuse TIME_WAIT sockets for new connections when it is safe from protocol viewpoint.
1.1.5.3 /proc/sys/net/ipv4/tcp_tw_recycle
快速回收处理TIME_WAIT的socket.
Enable fast recycling of TIME_WAIT sockets.
1.1.5.4 /proc/sys/net/ipv4/tcp_max_syn_backlog
等待client做ack的连接数目上限
1.1.5.5 /proc/sys/net/core/somaxconn
每个端口监听队列的最大长度。
1.1.5.6 /proc/sys/net/core/netdev_max_backlog
网络设备接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。
1.1.6 /proc/sys/fs
1.1.6.1 /proc/sys/fs/file-max
所有进程允许打开文件的最大数量 note(dirlt):这个应该是和文件描述符有区别的
1.1.6.2 /proc/sys/fs/epoll/max_user_instances
单个用户使用epoll的文件描述符上限。如果超过上限会返回EMFILE错误。 note(dirlt):不过在我的文件系统下面似乎没有这个选项
1.1.6.3 /proc/sys/fs/epoll/max_user_watches
单个用户使用epoll进行watch的文件描述符上限。 note(dirlt):对于服务器应该特别有用,可以限制内存使用量
This specifies a limit on the total number of file descriptors that a user can register across all epoll instances
on the system. The limit is per real user ID. Each registered file descriptor costs roughly 90 bytes on a 32-bit
kernel, and roughly 160 bytes on a 64-bit kernel. Currently, the default value for max_user_watches is 1/25 (4%)
of the available low memory, divided by the registration cost in bytes.
1.1.7 /proc/sys/kernel
1.1.7.1 /proc/sys/kernel/hung_task_timeout_secs
Detecting hung tasks in Linux
Sometimes tasks under Linux are blocked forever (essentially hung). Recent Linux kernels have an infrastructure to detect hung tasks. When this infrastructure is active it will periodically get activated to find out hung tasks and present a stack dump of those hung tasks (and maybe locks held). Additionally we can choose to panic the system when we detect atleast one hung task in the system. I will try to explain how khungtaskd works.
The infrastructure is based on a single kernel thread named as “khungtaskd”. So if you do a ps in your system and see that there is entry like [khungtaskd] you know it is there. I have one in my system: "136 root SW [khungtaskd]"
The loop of the khungtaskd daemon is a call to the scheduler for waking it up after ever 120 seconds (default value). The core algorithm is like this:
One can change the sampling interval of khungtaskd through the sysctl interface /proc/sys/kernel/hung_task_timeout_secs.
之前在hdfs一个datanode上面出现了磁盘损坏问题,然后在syslog里面发现了下面日志
The JBD is the journaling block device that sits between the file system and the block device driver. The jbd2 version is for ext4.
1.1.8 /proc/net
1.1.8.1 /proc/net/tcp
记录所有tcp连接,netstat以及lsof都会读取这个文件. 我们遇到过一个问题就是netstat/lsof速度非常慢,通过strace发现是在读取这个文件时候非常耗时,下面两个链接给出了一些相关信息
todo(dirlt):
1.2 system utility
1.2.1SYS DEV
1.2.2 mpstat
mpstat - Report processors related statistics.
通常使用就是"mpstat -P ALL 1"
其中每个字段的意思分别是:
1.2.3 vmstat
1.2.4 free
1.2.5 taskset
可以用来获取和修改进程的CPU亲和性。
如果不指定-c的话那么就是获取亲和性。程序上的话可以使用sched_setaffinity/sched_getaffinity调用来修改和获取某个进程和CPU的亲和性。
1.2.6 lsof
todo(dirlt):
1.2.7 hdparm
hdparm - get/set hard disk parameters
下面是使用的用法
对于device的话可以通过mount来查看
我们关注自己读写目录,比如通常在/home下面,这里就是使用的device就是/dev/mapper/VolGroup00-LogVol00
todo(dirlt):好多选项都不太清楚是什么意思.
1.2.8 pmap
todo(dirlt):
1.2.9 strace
todo(dirlt):
1.2.10 iostat
iostat主要用来观察io设备的负载情况的。首先我们看看iostat的样例输出
第一行显示了CPU平均负载情况,然后给出的信息是自从上一次reboot起来今的iostat平均信息。如果我们使用iostat采用interval输出的话,那么下一次的数值是相对于上一次的数值而言的。这里解释一下CPU的各个状态:
然后在来看看iostat的命令行参数
其中interval表示每隔x时间刷新一次输出,而count表示希望输出多少次.下面解释一下每隔参数的含义:
iostat也可以指定选择输出哪些block device.
通常命令也就是iostat -d -k -x 1.我们来看看样例输出
然后分析其中字段:
1.2.11 vmtouch
https://github.com/hoytech/vmtouch
note(dirlt):可以用来warmup数据,使用参数似乎也比较简单
里面有一些系统调用比较值得注意和学习:
1.2.12 latencytop
todo(dirlt): https://latencytop.org/
1.2.13 iotop
可以用来观察单独进程的IO使用状况
todo(dirlt):
1.2.14 dstat
todo(dirlt): https://github.com/dagwieers/dstat
http://weibo.com/1840408525/AdGkO3uEL dstat -lamps
1.2.15 slurm
Simple Linux Utility for Resource Management todo(dirlt): https://computing.llnl.gov/linux/slurm/
1.2.16 sar
sar - Collect, report, or save system activity information.
下面是所有的选项
关于网络接口数据显示的话,下面是使用DEV可以查看的字段
下面是使用EDEV可以查看的字段
下面是使用SOCK可以查看的字段
选项非常多,但是很多选项没有必要打开。对于网络程序来说的话,通常我们使用到的选项会包括
通常我们使用的命令就应该是sar -n DEV -P ALL -u 1 0(1表示1秒刷新,0表示持续显示)
1.2.17 netstat
netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
netstat可以查看很多信息,包括网络链接,路由表,网卡信息,伪装链接以及多播成员关系。但是从文档上看,一部分工作可以在/sbin/ip里面完成
我们这里打算对netstat使用限制在查看网络连接,以及各种协议的统计数据上.
首先我们看看如何查看各种协议的统计数据.
我们可以查看和tcp,udp以及raw socket相关的数据,delay表示刷新时间。
内容非常多这里也不详细分析了。
然后看看连接这个部分的功能
对于address_family允许指定协议族,通常来说我们可能会使用
然后剩下的选项
我们看看一个使用的例子
下面是对于tcp socket的字段解释.对于unix domain socket字段不同但是这里不写出来了.
1.2.18 tcpdump
todo(zhangyan04):
1.2.19 iftop
todo(dirlt): http://www.ex-parrot.com/~pdw/iftop/
1.2.20 iftraf
todo(dirlt): http://iptraf.seul.org/
1.2.21 rsync
常用选项:
常用命令:
1.2.22 iodump
1.2.23 iopp
1.2.24 nethogs
todo(dirlt):
1.2.25 slabtop
slabtop - display kernel slab cache information in real time
1.2.26 nmon
nmon - systems administrator, tuner, benchmark tool.
http://nmon.sourceforge.net/pmwiki.php Nigel's performance Monitor for Linux
1.2.27 collectl
collectl http://collectl.sourceforge.net/ todo(dirlt):似乎相当不错,将很多关键信息都做了收集和整合
1.2.28 numactl
todo(dirlt):
1.2.29 jnettop
todo(dirlt):
1.2.30 glances
http://nicolargo.github.io/glances/
todo(dirlt):
1.2.31 ifconfig
ifconfig - configure a network interface
/sbin/ifconfig可以用来配置和查看network interface.不过从文档上看的话,更加推荐使用/sbin/ip这个工具
这里我们不打算学习如何配置network interface只是想查看一下网卡的信息。使用/sbin/ifconfig -a可以查看所有的网卡信息,即使这个网卡关闭。
我们这里稍微仔细看看eht1的网卡信息
使用ifconfig能够创建虚拟网卡绑定IP
1.2.32 ps(process snapshot)
进程状态有下面几种:
在使用ubuntu的apt-get时候,可能会出现一些异常的状况,我们直接终止了apt-get。但是这个时候apt-get软件本身出于一个不正常的状态, 导致之后不能够启动apt-get。如果观察进程的话会出现下面一些可疑的进程
这些进程的父进程都是init进程,并且状态是uninterruptible sleep,给kill -9也没有办法终止,唯一的办法只能reboot机器来解决这个问题。关于这个问题可以看stackoverflow上面的解答 How to stop 'uninterruptible' process on Linux? - Stack Overflowhttp://stackoverflow.com/questions/767551/how-to-stop-uninterruptible-process-on-linux
1.2.33 ulimit
todo(dirlt)
1.2.34 sysprof
Sysprof - Statistical, system-wide Profiler for Linux : http://sysprof.com/
1.2.35 ss
1.2.36SYS ADMIN
1.2.37 uptime
1.2.38 top
1.2.39 htop
1.2.40 ttyload
1.2.41 dmesg
能够察看开机时启动信息(启动信息保存在/var/log/dmesg文件里)
1.2.42 quota
http://blog.itpub.net/post/7184/488931
quota用来为用户编辑磁盘配额。
修改/etc/fstab增加usrquota以及grpquota
如果为用户设定可以使用/usr/sbin/edquota -u testuser,如果需要为群组设定的话/usr/sbin/edquota -g testgrp.
各个字段含义如下:
可以使用/usr/sbin/edquota -t来修改软限额期限。
可以对WWW空间,FTP空间,Email空间进行磁盘配额限制。Quota只能基于磁盘分区进行配额管理,不能基于目录进行配额管理,因此只能把数据存放在有配额限制的分区,再用符号链接到实际应用的目录。
1.2.43 crontab
crontab就是为了能够使得工作自动化在特定的时间或者是时间间隔执行特定的程序。crontab -e就可以编辑crontab配置文件,默认是vim编辑器。crontab配置文件里面可以像shell一样定义变量,之后就是任务描述,每一个任务分为6个字段: minute hour day month week command
对于每个字段可以有3种表示方式
对于系统级别的crontab配置文件在/etc/crontab貌似里面还多了一个用户字段.下面是几个配置的例子:
1.2.44 ntp
ntp(network time protocol)是用来做机器时间同步的,包含下面几个组件:
一个最重要的问题就是,daemon以什么时间间隔来和指定的server进行同步。
ntp是可以在minpoll和maxpoll指定的时间间隔内来选择同步间隔的,默认使用minpoll也就是64seconds.
其实如果不考虑为其他机器提供服务的话,完全可以在cron里面使用ntpdate来进行同步。
1.2.45 cssh
todo(dirlt):
1.2.46 iptables
查看当前过滤规则 iptables -L/-S
可以使用 iptables -A [chain] [chain-specification]来添加规则
其中chain指INPUT, 之后部分都是chain-specification. 其中s表示过滤源地址,d表示目的地址,而-j而表示动作。
可以使用 iptables -D 来删除规则。其中规则既可以使用rule-num来引用,也可以使用chain-specification来指定
1.2.47HTTP BENCH TOOL
1.2.48 httperf
download http://www.hpl.hp.com/research/linux/httperf/
paper http://www.hpl.hp.com/research/linux/httperf/wisp98/httperf.pdf
httperf是用来测试HTTP server性能的工具,支持HTTP1.0和1.1.下面是这个工具命令行参数
httperf有几种不同的workload方式:
note(dirlt):关于session-oriented这个概念,是后来看了论文里面才清楚的。主要解决的就是实际中browse的场景。 通常我们请求一个页面里面都会嵌入很多objects包括js或者是css等。我们一次浏览称为session,而session里面会有很多请求。 这些请求通常是,首先等待第一个请求处理完成(浏览器解析页面),然后同时发起其他请求。
常用选项
note(dirlt):不过httperf采用select模型,导致最大连接数存在上限。
结果分析
Connection部分
Request部分
Reply部分
如果使用session模式的话,那么结果会有
1.2.49 ab
ab(apache benchmarking)是apache httpd自带的一个HTTP Server个的工具。下面是这个工具命令行参数
功能上没有httperf多但是觉得应该大部分时候足够使用的。
note(dirlt):ab和httperf工作模型不同。httperf是指定建立多少个链接,每个链接上发起多少个calls。而ab指定一共发送多少个请求, 每批发送多少个请求,然后计算每批时间统计。ab必须等待这批请求全部返回或者是失败或者是超时。可以作为对方的互补。nice!!!
下面看看每个参数的含义:
我们可以这样使用ab -c 100 -n 10000 -r localhost/ 输出还是很好理解的。对于最后面百分比时间,注意是包含100个concurrency的结果。
1.2.50 autobench
http://www.xenoclast.org/autobench/
autobench作为httperf包装,也提供了分布式压力测试的工具。
这里先介绍一下单机使用情况。autobench的manpage提供了非常清晰的说明 http://www.xenoclast.org/autobench/man/autobench.html. 可以看到autobench提供了比较两个站点的性能。
默认配置文件是~/.autobench.conf,方便经常使用。常用命令方式就是
得到tsv文件之后可以使用bench2graph转换成为png格式。bench2graph需要做一些修改
使用bench2graph bench.tsv bench.png,然后会提示输入title即可生成比较图。
todo(dirlt):后续可能需要学习如何使用autobench分布式测试,因为httperf该死的select模型。
1.3 kernel
1.3.1 vmlinuz
vmlinuz是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。vmlinuz是可执行的Linux内核,它位于/boot/vmlinuz,它一般是一个软链接。vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件。
vmlinuz的建立有两种方式。一是编译内核时通过“make zImage”创建,然后通过:“cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage /boot/vmlinuz”产生。zImage适用于小内核的情况,它的存在是为了向后的兼容性。二是内核编译时通过命令make bzImage创建,然后通过:“cp /usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz”产生。bzImage是压缩的内核映像,需要注意,bzImage不是用bzip2压缩的,bzImage中的bz容易引起误解,bz表示“big zImage”。 bzImage中的b是“big”意思。
zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有gzip解压缩代码。所以你不能用gunzip 或 gzip –dc解包vmlinuz。内核文件中包含一个微型的gzip用于解压缩内核并引导它。两者的不同之处在于,老的zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么可以采用zImage或bzImage之一,两种方式引导的系统运行时是相同的。大的内核采用bzImage,不能采用zImage。
1.3.2 tcp IO
http://www.ece.virginia.edu/cheetah/documents/papers/TCPlinux.pdf
note(dirlt):后面影响拥塞部分没有看
packet reception
整个流程大致如下:
其中内核参数有
packet transmission
整个流程大致如下:
其中内核参数有:
note(dirlt):在wangyx的帮助下这个配置在ifconfig下面找到了
txqueuelen = 1000
1.3.3 tcp congestion control
1.3.4 kernel panic
todo(dirlt):
1.4 application
1.4.1 返回值问题
首先看下面一段Java程序
然后这个Java程序被Python调用,判断这个打印值
返回值不为1而是256,对此解释是这样的
然后下面这段Python程序,使用echo $?判断返回值为0而不是256
1.4.2 dp8网卡问题
当时dp8的网络流量从一个非常大的值变为非常小的值,检查/proc/net/netstat,以下几个统计数值dp8和其他机器差距较大(相差1-2个数量级):
之后在dmesg上面发现如下线索:
[4804552.008858] bnx2: eth0 NIC Copper Link is Up, 100 Mbps full duplex dp8上的网卡速度被识别成100 Mbps了。,可能的原因如下:
我们的网线都是由 世xx联 提供的,质量应该不错,有两种情况需要优先排除。
1.4.3 修改资源限制
临时的修改方式可以通过ulimit来进行修改,也可以通过修改文件/etc/security/limits.conf来永久修改
1.4.4 CPU温度过高
这个问题是我在Ubuntu PC上面遇到的,明显的感觉就是运行速度变慢。然后在syslog里面出现如下日志:
1.4.5 sync hangup
1.4.6 更换glibc
@2013-05-23 https://docs.google.com/a/umeng.com/document/d/12dzJ3OhVlrEax3yIdz0k08F8tM8DDQva1wdrD3K49PI/edit 怀疑glibc版本存在问题,在dp45上操作但是出现问题。
我的操作顺序计划是这样的:
但是进行到2之后就发现cp不可用了,并且ls等命令也不能够使用了。原因非常简单,就是因为2之后libc.so.6没有对应的文件了,而cp,ls这些基本的命令依赖于这个动态链接库。
todo(dirlt): what is the correct way to do it(change glibc)
@2013-08-03
A copy of the C library was found in an unexpected directory | Blog : http://blog.i-al.net/2013/03/a-copy-of-the-c-library-was-found-in-an-unexpected-directory/
上面的链接给出了升级glibc的方法
1.4.7 允许不从tty执行sudo
修改/etc/sudoers文件,注释掉
1.4.8 ssh proxy
http://serverfault.com/questions/37629/how-do-i-do-multihop-scp-transfers
Date: 2014-06-17T10:30+0800
Org version 7.9.3f withEmacs version 24
Validate XHTML 1.0