CPU和内存监测

CPU和内存监测

vmstat命令的VM模式

vmstat可以监测给定时间间隔的服务器的状态值,包括CPU的使用率,内存的使用,虚拟内存的交换情况,IO读写情况。
主要从/proc/meminfo,/proc/stat和/proc/*/stat中获取数据

常用手段vmstat [采样的时间间隔秒数] [采样的次数],举例如下:

[root@dtbase-master-2 /root]
#vmstat 5 10
procs    -----------memory----------   ---swap--  -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache       si   so    bi   bo    in    cs us sy id wa st
 1  0      0 4126684 314132 58308212    0    0     0   637     0     0  2  1 97  0  0
 1  0      0 4256016 314132 58308420    0    0     0 42898 19349 35174  3  2 95  0  0
 4  0      0 4010396 314132 58474112    0    0     0 68072 19846 37088  4  2 93  0  0
 1  0      0 4180556 314132 58308800    0    0     0 67730 19228 34979  4  2 94  0  0
 1  0      0 4158408 314140 58313740    0    0     1 36034 19217 39319  4  2 94  0  0
 2  0      0 4185816 314144 58313892    0    0     0 43252 19071 33302  3  2 95  0  0
 2  0      0 4237076 314144 58314180    0    0     0 43059 18850 36224  3  2 95  0  0
 1  0      0 4174432 314144 58314432    0    0     0 29495 18353 35612  3  2 95  0  0
 2  0      0 4168024 314144 58318984    0    0     0 49652 19954 38394  3  2 94  0  0
 0  0      0 4241088 314144 58319304    0    0     0 36272 17563 32637  2  1 97  0  0

上述命令表示每5秒采样一次,采样10次,因此输出10条记录,如果不指定采样次数的话,就一直采集直到用户手动停止采集。

上述显示中每一列的含义介绍如下:
*procs部分
* r 表示运行队列,表示Runnable状态的进程数,表示等待CPU的进程数量,越高意味着CPU越忙。
* b 表示阻塞的进程,表示uninterruptible sleep状态的进程数,通常可以认为表示等待IO的进程数量。
* memory部分
* swpd 表示已使用的交换空间大小,如果大于0,表示内存不足了。
* free 表示空闲的物理内存大小,单位是KB,上面表示还剩4G物理内存空闲
* buff 表示要输出到块设备但还缓存在内存中的数据
* cache 表示从块设备读入到内存中,缓存在内存中的数据,不包括tmpfs消耗的内存大小
* swap部分
* si 表示每秒有多少块从磁盘换入内存,如果这个值大于0,表示物理内存耗尽了
* so 表示每秒有多少块从内存换入磁盘,如果这个值大于0,表示物理内存耗尽了
* io部分
* bi 表示从块设备每秒收到的块数量,单位为blocks/s
* bo 表示每秒发到块设备的块数量,单位为blocks/s
* system部分
* in 表示每秒CPU的中断次数,包括时间中断
* cs 表示每秒上下文切换次数,越小越好
* cpu部分
* us 表示用户cpu时间,就是非内核态运行的CPU时间,单位是百分比
* sy 表示系统cpu时间,就是内核代码运行时间,单位是百分比
* id 表示空闲CPU时间,单位是百分比
* wa 表示等待IO的CPU时间,单位是百分比
* st 虚机占用的时间,单位是百分比
上述内存、交换区、IO统计的单位是块数,通常在Linux中一个块是1K字节。

free命令

参数和用法

free命令用于查看系统整体的内存使用情况,它的参数如下:
* -b/-k/-m/-g,调整显示单位,分别表示以字节/千字节/兆字节/吉字节为单位显示,默认是-k
* -t,增加一行显示内存总量,包括总内存量、总已用内存量和总空闲内存量
* -o,不显示buffer/cache调整行,就是-/+ buffers/cache行
* -l,增加两行显示低端和高端内存统计
* -s/-c,表示采样时间和采样次数

free命令的信息从/proc/meminfo中获取,meminfo函数可以解析meminfo的信息

输出分析

free命令输出举例如下:

#free -l -t 
             total       used       free     shared    buffers     cached
Mem:      99174024   95247820    3926204          0     314920   58382632
Low:      99174024   95247820    3926204
High:            0          0          0
-/+ buffers/cache:   36550268   62623756
Swap:      2097144          0    2097144
Total:   101271168   95247820    6023348

上述各行含义分别是:
* Mem:这行是表示从OS角度看系统内存的使用情况。
* total表示物理内存总量
* used表示
* free
* shared表示几个进程共享的内存,目前已经废弃,总是0。
* buffers,表示被OS buffer的内存,也就是缓冲要输出到块设备的数据
* cahced,表示被OS cache的内存,是OS从磁盘读出缓存到内存中的数据
* Low:表示从OS角度看的低端内存使用情况
* High:表示从OS角度看的高端内存使用情况,上面因为是64位系统,因此高端内存部分为0。
* -/+ buffers/cache:
* used,表示从一个应用程序的角度看,系统有多少内存被用掉了。
* free,表示从一个应用程序的角度看,系统还要多少剩余内存可用。
* Swap:表示交换区信息。
* Total:表示总量。
一般为了提高性能,操作系统总是会将磁盘的数据预先读到内存,而要写入磁盘的数据则先缓存在内存中,因此会看到free列比较小,而buffers/cache列比较大。

top命令

top命令用来实时监控系统的CPU、内存等负载状态,可以按照进程实时输出各进程占用的资源状态。

参数和用法

启动参数如下:
* -p 指定进程号,仅监控某个进程
* -c 显示整个命令行,而不仅仅是命令名

交互命令如下:
* h,输出帮助
* k,杀死进程,需要根据提示输入PID
* i,忽略闲置和僵尸进程,就是忽略掉不占用CPU的进程
* f,选择显示的列,是交互设置的,新版本还可以设置按照哪一列排序,老版本支持的字段较少。
* q,退出程序

输出分析

top - 16:44:59 up 3 days, 30 min,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.3 st
KiB Mem:   1883984 total,  1797296 used,    86688 free,   169388 buffers
KiB Swap:  2097148 total,        0 used,  2097148 free.   230428 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                                        
15597 root      20   0 2809456 721308   9592 S  0.0 38.3  28:37.43 java                                          
  • 首行显示系统负载和系统运行时间,当前登录用户数
  • Tasks行显示当前系统进程按状态的统计数
  • %Cpus显示当前系统的CPU消耗百分比
  • Kib Mem显示内存使用量
  • Kib Swap显示交换空间使用了量

ps命令

用于显示进程信息,有两种参数格式,一种是标准格式ps -opt,一种是BSD格式ps opts

典型用法

  • 查看所有进程
    • ps aux / ps ax
    • ps -eF / ps -ef / ps -ely / ps -e
  • 显示线程信
    • ps -eLf
    • ps axms
  • 树形结构显示
    • ps -ejH
    • ps axjf
  • 格式化输出列,格式化输出支持的选项,具体可以查看man ps的STANDARD FORMAT SPECIFIERS部分
    • ps -eo [column1], [column2]
    • ps axo [column1], [column2]
  • 按用户输出
    • ps U [username]
  • 排序支持,使用–sort选项,–sort spec,这里的spec格式为[+|-]key[,[+|-]key],默认是+排序,表示升序
    • ps -e –sort=uid,-pid,表示按照uid升序,pid降序排序输出

输出分析

  • USER 用户名
  • UID 用户ID(User ID)
  • PID 进程ID(Process ID)
  • PPID 父进程的进程ID(Parent Process id)
  • SID 会话ID(Session id)
  • %CPU 进程的cpu占用率
  • %MEM 进程的内存占用率
  • VSZ 进程所使用的虚存的大小(Virtual Size)
  • RSS 进程使用的驻留集大小或者是实际内存的大小,Kbytes字节。
  • TTY 与进程关联的终端(tty)
  • STAT 进程的状态:进程状态使用字符表示的(STAT的状态码)
    • R 运行 Runnable (on run queue)
    • S 睡眠 Sleeping
    • I 空闲 Idle
    • Z 僵死 Zombie(a defunct process) 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放。
    • D 不可中断 Uninterruptible sleep (ususally IO) 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生。
    • T 终止 Terminate,进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行。
    • P 等待交换页
    • W 无驻留页 has no resident pages,没有足够的内存分页可分配。
    • X 死掉的进程
    • < 高优先级进程 高优先序的进程
    • N 低优先 级进程 低优先序的进程
    • L 内存锁页 Lock 有记忆体分页分配并缩在记忆体内
    • s 进程的领导者(在它之下有子进程);
    • l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads)
      • 位于后台的进程组
  • START 进程启动时间和日期
  • TIME 进程使用的总cpu时间
  • COMMAND 正在执行的命令行命令
  • NI 优先级(Nice)
  • PRI 进程优先级编号(Priority)
  • WCHAN 进程正在睡眠的内核函数名称;该函数的名称是从/root/system.map文件中获得的。
  • FLAGS 与进程相关的数字标识

IO监测

iostat

参数和用法

iostat命令的参数介绍如下
* -c,显示CPU利用率,默认启用,单独指定后默认不输出设备利用率
* -d,显示设备利用率,默认启用,单独指定后默认不输出cpu利用率
* -h,配合-n选项使用,使NFS系统的报告更human readable
* -k/-m,调整输出单位,千字节每秒或者兆字节每秒,默认单位是块每秒
* -N,显示磁盘阵列信息
* -n,显示NFS网络文件系统的IO报告
* -p,可指定分区查看,格式为-p [{device [,…]} | ALL]
* -t,输出时打印时间
* -x,输出扩展信息,就是输出更详细的信息,一般都使用该参数。
* -z,忽略没有活动的设备的输出
用法如下
iostat [参数] [采样时间秒数] [采样次数]
iostat -c 2 每隔2秒显示1次CPU统计信息
iostat -d 2 每隔2秒显示1次设备统计信息
iostat -d -x 2 10每隔2秒显示1次设备扩展统计信息,共显示10次。
iostat -d sda sdb -x 2 10 每隔2秒显示1次设备sda和sdb的扩展统计信息,共显示10次。

输出分析

#iostat -x  1 6   
Linux 2.6.32-220.23.2.ali878.el6.x86_64 (dtbase-master-2)       07/08/2016      _x86_64_        (32 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.03    0.00    1.14    0.01    0.00   96.82

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.01  3964.69    0.17  591.78     7.41 41068.15    69.39     0.14    0.24   0.03   1.75

#iostat -d 5 1
Linux 2.6.32-220.23.2.ali878.el6.x86_64 (dtbase-master-2)       07/08/2016      _x86_64_        (32 CPU)

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda             593.11         7.39     41159.65    5836572 32509188906

上述输出中各部分信息描述如下:
* avg-cpu部分,对应-c输出的内容
* %user,表示用户CPU时间百分比
* %nice,表示用户态CPU的nice操作消耗的CPU时间百分比
* %system,表示内核CPU时间百分比
* %iowait,表示CPU花在io等待上的时间百分比
* %steal,表示虚机占用的CPU时间百分比
* %idle,表示CPU空闲时间百分比
* device部分,对应-d输出的内容
* rrqm/s,表示每秒这个设备有多少读取请求被Merge了,当系统调用读取数据时,VFS将请求发给各个FS,各个FS会根据请求是否是读取相同的block来合并读请求。
* wrqm/s,表示每秒这个设备有多少写请求被Merge了。
* r/s,表示每秒发送到设备的读取请求数
* w/s,表示每秒发送到设备的写入请求数
* rsec/s,表示每秒读取的扇区数量
* wsec/s,表示每秒写入的扇区数量
* avgrq-sz,表示发送到设备的请求的平均大小,单位是扇区
* avgqu-sz,表示发送到设备的请求的平均队列长度
* await,表示IO请求的平均执行时间,包括发送请求和执行的时间,但是为毫秒
* svctm,表示发送到设备的IO请求的平均执行时间,单位是毫秒,这里仅包含执行时间,不包含发送请求的时间
* %util,表示设备带宽利用率,实际是IO请求发送到设备期间占用的CPU时间的百分比。
* tps,表示该设备每秒的传输次数,一次传输是一次IO,多个逻辑IO可能被合并为一次物理IO,一次IO的大小未知。
* blk_read/s,表示每秒读入块的数量
* blk_wrtn/s,表示每秒写入块的数量
* blk_read,表示系统启动以来读入块的总数
* blk_wrtn,表示系统启动以来写入块的总数

vmstat的disk和partition模式

disk模式

vmstat -d [采样时间] [采样次数],列出所有块设备的读写情况,每个块设备一行。

[root@iZ2371imwx3Z ~]# vmstat -d 5 2
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
xvda  2143955  51246 98066178 79024080 787667 454849 30875448 26476350      0   2937
xvda  2143955  51246 98066178 79024080 787668 454849 30875456 26476352      0   2937

上述命令中各个字段的含义是:
* reads部分
* total,表示系统启动到现在完成读的总次数
* merged,表示系统启动到现在group读的次数,group read是反映为一次IO
* sectors,表示系统启动到现在读了多少个扇区
* ms,表示系统启动到现在读消耗的毫秒数
* writes部分
* total,表示系统启动到现在完成写的总次数
* merged,表示系统启动到现在group写的次数,group write反映为一次IO
* sectors,表示系统启动到现在写了多少个扇区
* ms,表示系统启动到现在写消耗的毫秒数
* IO部分
* cur:正在处理的IO数
* sec,表示系统启动到现在IO消耗的时间

partition模式

vmstat -p 设备分区 [采样时间] [采样次数],列出指定分区的读写情况

[root@iZ2371imwx3Z ~]# vmstat -p /dev/xvda1 5 2
xvda1         reads   read sectors  writes    requested writes
             2143776   98064746     788481   30893256
             2143776   98064746     788482   30893288

上述命令中各个字段的含义如下:
* reads,表示系统启动到现在此分区上总的读次数
* read sectors,表示系统启动到现在此分区上读的扇区总数
* writes,表示系统启动到现在此分区上总的写次数
* requested writes,表示系统启动到现在对此分区的写请求总数

网络监测

netstat

netstat命令用来显示网络连接状态信息,这个命令官方已经废弃,可以用ss代替

参数和用法

  • -r, 显示路由表信息,现在由ip route命令替代。
  • -g,显示组播信息,现在由ip maddr命令替代。
  • -i,显示接口信息,包括接口的MTU、二层包统计,接口标签信息。现在由ip -s link替代
  • -s,显示各协议的总的统计信息
  • -v,显示详细信息
  • -W,宽显示,不会截断ip地址
  • -n,以数字形式显示地址端口用户,而不是以DNS、协议名、用户名显示
  • –protocol=family,指定协议族,包括inet, inet6, unix, ipx, ax25, netrom, econet, ddp,可以简写为-4, -6 -x
  • -c,每秒连续输出
  • -e,显示扩展信息,目前主要是增加了user和inode列显示
  • -o,增加一列显示定时器信息
  • -p,增加一列显示该socket所属的进程号和进程信息
  • -l,仅显示监听端口,监听端口默认是不输出的
  • -a,显示监听和非监听的端口
  • -r -F,输出FIB的路由信息,内核路由表
  • -r -C,输出路由缓存的路由信息,内核路由缓存
  • delay 整数参数,指定每个多少秒输出一次

典型用法:
netstat -anp

输出分析

[root@iZ2371imwx3Z ~]# netstat --protocol=inet -a -W -e -o -v -p 
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name     Timer
tcp        0      0 0.0.0.0:https           0.0.0.0:*               LISTEN      root       315002     15597/java           off (0.00/0/0)
tcp        0      0 localhost:mxi           0.0.0.0:*               LISTEN      root       315068     15597/java           off (0.00/0/0)
tcp        0      0 0.0.0.0:8009            0.0.0.0:*               LISTEN      root       314999     15597/java           off (0.00/0/0)
tcp        0      0 0.0.0.0:http            0.0.0.0:*               LISTEN      root       314998     15597/java           off (0.00/0/0)
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN      root       13009      780/sshd             off (0.00/0/0)
tcp        1      0 iZ2371imwx3Z:http       iZ2371imwx3Z:55825      CLOSE_WAIT  root       906801     15597/java           off (0.00/0/0)
tcp        0      0 iZ2371imwx3Z:45708      69.172.201.153:http     ESTABLISHED root       734431     15597/java           off (0.00/0/0)
tcp        0      0 iZ2371imwx3Z:45613      69.172.201.153:http     ESTABLISHED root       882000     15597/java           off (0.00/0/0)
tcp        1      0 iZ2371imwx3Z:http       iZ2371imwx3Z:42164      CLOSE_WAIT  root       890885     15597/java           off (0.00/0/0)

#netstat -x -e -o -p
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node PID/Program name    Path
unix  2      [ ]         DGRAM                    23365  9251/java           @alimonitor9251
unix  2      [ ]         DGRAM                    15468  2820/java           @alimonitor2820
unix  2      [ ]         DGRAM                    26408  9670/java           @alimonitor9670
unix  2      [ ]         DGRAM                    9514   1108/udevd          @/org/kernel/udev/udevd
unix  3      [ ]         STREAM     CONNECTED     62870049 19964/syslog-ng     /dev/log
unix  3      [ ]         STREAM     CONNECTED     62870048 17807/pickup        
  • Inet和Inet6域Socket的输出
    • Proto,当前socket的协议类型,tcp、udp、udpl、raw
    • Recv-Q
      • ESTABLISHED状态表示用户程序还没有从这个socket读取的字节数
      • LISTENING状态表示当前的syn backlog
    • Send-Q
      • ESTABLISHED状态表示对端没有ACK的字节数
      • LISTENING状态表示syn backlog的最大size
    • Local Address:本地地址和端口
    • Foreign Address:对端地址和端口
    • State,表示socket状态,一般仅在TCP下才有效,对应TCP的各个状态
    • User,表示这个socket的属主
    • PID/Program name,表示这个socket所属进程的PID和进程名
  • UNIX域socket的输出
    • Proto,当前协议类型,unix
    • RefCnt,当前socket关联的进程数
    • Flags,socket选项
    • Type,socket类型,包括数据报、流类型、RAW类型、RDM、SEQPACKET类型、SOCK_PACKET
    • State,Free未分配,CONNECTING表示连接建立,空表示未连接
    • Path,表示该socket路径

ss

ss用于替代netstat命令,用于输出socket的统计信息,输出类似netstat,可以显示更详细的TCP状态信息。

参数和用法

大部分参数和netstat一样,下面描述几个特有的参数
* -i,输出TCP内部的一些信息,包括各个连接的水位、选项的值。
* -m,输出socket的一些内存使用信息
* -s,按协议输出统计信息
* -D filename,dump socket原始信息到文件,这里是二进制信息。
* -t/-u/-4/-6/-x/-w/-0,指定协议的快捷选项,分别表示tcp、udp、ip、ipv6、unix、raw、packet

ifconfig

显示接口信息,目前ip命令可以实现其所有功能,这个命令正逐步被废弃。

参数和用法

  • -a,显示所有接口,包括down的接口,默认down接口不显示
  • -s,简要显示,类似netstat -i
  • up/down 启用/禁用接口
  • arp/-arp 在指定接口上启用/禁用ARP
  • promisc/-promisc 在指定接口上启用/禁用混杂模式
  • allmulti/-allmulti,在指定接口上启用/禁用组播
  • mtu N,设置MTU
  • dstaddr addr,点对点链路配置远端地址
  • netmask addr,设置网络掩码
  • add addr/prefixlen,添加地址
  • del addr/prefixlen,删除地址
  • media type,设置接口媒体类型
  • broadcast addr,设置或者取消接口广播地址
  • pointopoint [addr],设置接口为点对点模式,addr表示远端的协议层地址
  • hw class address,设置接口硬件地址,class包括ether、ax25、ARCnet、netrom

典型用法

ifconfig [接口名] 选项
ifconfig eth0 add 192.168.1.1/24

输出分析

[root@iZ2371imwx3Z ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.252.100.80  netmask 255.255.248.0  broadcast 10.252.103.255
        ether 00:16:3e:00:85:43  txqueuelen 1000  (Ethernet)
        RX packets 27674  bytes 5689074 (5.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 33051  bytes 4136017 (3.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ip

ip是显示和管理网络设备、路由、邻接表、策略路由、隧道的命令,功能强大。

参数和用法

链路管理

ip link

地址管理

ip addr

路由管理

ip route

ARP和邻接表管理

ip neigh
ip ntable

路由策略管理

ip rule

TCP Metric管理

ip tcp_metrics

ip隧道管理

ip tunnel

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
正文 为了弥补pcap文件的缺陷,让抓包文件可以容纳更多的信息,pcapng格式应运而生。关于它的介绍详见《 PCAP Next Generation Dump File Format 》         当前的wireshark/tshark抓取的包默认都被保存为pcapng格式。         形而上的论述就不多谈了,直接给出一个pcapng数据包文件的例子: 然后我强烈建议,对着《 PCAP Next Generation Dump File Format 》来把一个实际抓取的pcapng文件里面
PS:历史原因作者账号名为:ymh198816,但事实上作者的生日并不是1988年1月6日 今天作者要在这里通过一个简单的电商网站订单实时分析系统和大家一起梳理一下大数据环境下的实时分析系统的架构模型。当然这个架构模型只是实时分析技术的一 个简单的入门级架构,实际生产环境中的大数据实时分析技术还涉及到很多细节的处理, 比如使用Storm的ACK机制保证数据都能被正确处理, 集群的高可用架构, 消费数据时如何处理重复数据或者丢失数据等问题,根据不同的业务场景,对数据的可靠性要求以及系统的复杂度的要求也会不同
一 协议端口 如果把IP地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口可以有65536(即:2^16)个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535(2^16-1)。 在Internet上,各主机间通过TCP/IP协议发送和接收数据包,各个数据包根据其目的主机的ip地址来进行互联网络中的路由选择,把数据包顺利的传送到目的主机。大多数操作系统都支持多程序(进程)同时运行,那么目的主机应该把接收到的数据包传送给众多同时运行的进程中的哪一个
MyBatis真正的强大,在于其映射语句的魔力。 SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序): (1)cache  给定命名空间的配置缓存。 (2)cache-ref  其他命名空间缓存配置的引用。 (3)resultMap  是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象 (4)sql 可被其他语句引用的可重用语句块。 (5)insert 映射插入语句 (6)update  映射更新语句 (7)delete   映射删除语句 (8)select   映射查询语句
1、Maven构建Spring Boot 创建Maven Web工程,引入spring-boot-starter-parent依赖 project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/m

平衡搜索树之AVLTree - 2016-07-24 14:07:56

今天我想要在这里写下个人觉得比较难的数据结构---AVL树的一些些心得。 一。了解一种新的数据结构,首先要搞懂它的定义 : AVL树又称为高度平衡的二叉搜索树,是1962年有俄罗斯的数学家G.M.Adel'son-Vel'skii和E.M.Landis提出来的。它能保持二叉树的高度 平衡,尽量降低二叉树的高度,减少树的平均搜索长度。所以严格点来说,对于一棵搜索二叉树,能达到O(logn)的只是AVL树,因为他对于二叉树的深度控制的最为严格 ,那么这是为什么呢?让我们来看看 AVL树的性质 : 左子树和右子

linux基础知识 - 2016-07-24 14:07:48

1:基本知识 微内核:是一种提供必要服务的操作系统内核,大部分内核都作为单独的进程在特权模式先运行,他们通过消息传递进行通讯 单内核:单内核是个很大的进程,他的内部又悲愤为若干个模块,是个单独的二进制但印象,其模块间的通讯是通过直接调用其他模块中的函数实现的,而不是消息传递。 linux分几种应用程序级别 Ring 0 特权模式 一般是系统底层运行级别 Ring3 应用程序级别 一般的级别 有时候应用进程为了调用系统底层的模块,可能会在用户空间和内核空间之间进行来回的切换,这是很耗时间的,平时工作中应注意
1. 概述 嵌入式系统由硬件环境、嵌入式操作系统和应用程序组成,硬件环境是操作系统和应用程序运行的硬件平台,它随应用的不同而有不同的要求。硬件平台的多样性是嵌入式系统的主要特点,如何使嵌入式操作系统在不同的硬件平台上有效地运行,是嵌入式系统开发中需要解决的关键问题。解决的方法是在硬件平台和操作系统之间提供硬件相关层来屏蔽这些硬件的差异,给操作系统提供统一的运行环境,这种硬件相关层就是嵌入式系统中的板级支持包BSP(Board Support Package,简称BSP)。 2. BSP及其作用 BSP是嵌
一.什么是装箱?什么是拆箱? 在前面的文章中提到,Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料。在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行:   1 Integer i = new   Integer( 10 ); 而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样就可以了:   1 Integer i = 10 ;

Redis与Java - 数据结构 - 2016-07-24 14:07:41

Redis与Java 标签 : Java与NoSQL Redis( REmote DIctionary Server ) is an open source (BSD licensed), in-memory data structure store, used as database , cache and message broker . It supports data structures such as strings , hashes , lists , sets , sorted sets