Oracle数据库创建服务器进程以处理用户进程连接到数据库实例的请求,服务器进程可以是以下两种形式之一:

Dedicated server process -- 共服务一个用户的进程

Shared Server process -- 可以服务多个用户

直接连接进程图4-1展示直接连接如何工作,这个情景下,两个用户进程通过直接连接进程连接到数据库。

通常使用Shared Server并通过Dispatcher连接到数据库会更好,一个Shared Server可以更高效因为它处理多个请求却使用更少的资源。图4-2展示Shared Server如何工作。

在以下的情况,用户和管理员应该明确使用Dedicated Server连接

提交一个批处理作业

使用Recovery Manager来备、还原或恢复一个数据库

配置Dedicated Server如要在一个配置为Shared Server的数据库中使用Dedicated Server,用户必需使用一个配置为Dedicated Server的net service name。具体地说,以下参数必需包含在连接描述中 SERVER=DEDICATED

Figure 4-1 Oracle Database Dedicated Server Processes

Figure 4-2 Oracle Database Shared Server Processes

Oracle Share Server

形象比喻

Oracle Shared Server工作方式就像许多餐馆一样,一个服务员会服务多个餐桌。如果多数餐桌点菜量都很小,则餐馆只需要很少服务员即可满足需要,并且客户不会觉得自 己等待太久,这就是共享服务器的优点。但是如果忽然两个 餐桌来了很多客人,服务员会被这两个餐桌的工作淹没,其它餐桌就有可能无法因此获得及时响应,这就是共享服务器的缺点,也是它不适应的地方。

Oracle Share Server的优点和缺点

优点:

通常情况下,Oracle Shared Server能让读者在不需要增加硬件的情况下支持相同或更大数量的连接

Connection Pooling特性能使数据库服务器断开一个空闲的OracleShared Server连接来服务一个输入请求

Oracle Share Server是使用诸如Oracle Connection Manager等选件所必需的基础

缺点:

生成大量网络通信信息或产生大型结果集合的应用软件不适合Oracle Share Server

使用一个Oracle Share Server连接时,有些功能会被禁止。如不能启动、关闭或执行Oracle服务器的某些类型的恢复

不应使用它执行某些管理任务。如批量装入、索引与表的重建以及表分析。

Oracle Shared Server基础结构解析

使用Oracle  Shared Server时的PGA与SGA的变化

使用专用服务器时PGA包括:游标状态、用户会话数据和栈空间三部份内存。而Oracle Shared Server中PGA只有栈空间。

专 用服务器SGA包括Shared Pool,数据库高速缓存和重做日志缓冲器。而Oracle Shared Server的SGA包括Shared Pool、数据库高速缓存、数据库缓冲器、大型池(由纵多"用户全局区“组成)、一个请求队列和多个调度程序响应队列组成。

调度程序所维护的每个连接均被分配一个共享内存段,并形成虚拟电路(virtual circuit),调度程序使用它来管理客户与Oracle数据库之间的通信。

客户连接  Oracle Shared Server 的工作流程

客户在解析了服务器名称之后联系Oracle数据库

Oracle后台进程PMON(进程监视器)实时通知监听器调度程序(Dispatcher)正维护那些虚拟电路。由此,监听器知道该调度程序(Dispatcher)正管理着的连接数量,这个信息使得监听器能够利用调度程序负荷平衡特性

监听器确认客户供给的Oracle Service Name,然后找到连接数最小(或负荷最小)的调度程序,并把客户连接请求传递或重定向到最小负荷调度程序(Dispatcher)。

监听器把调度程序信息发回客户,以便客户能够把连接重定向到合适的调度程序进程。

PMON把连接信息注册给所有监听器,所有监听即可知道刚才的调度程序(Dispatcher)已经增加了一个连接

Dispatcher把用户请求放到全局共用的请求队列

Shared Server Process执行每个请求,并把已完成的请求放到Dispatcher的响应队列中

Dispatcher把已完成请求返回给客户

当一个客户连接终止时,PMON再次通监听器,以反映调度程序正在处理的连接数的变化。

配置Oracle Shared Server

共享内存资源已经被默认配置,所以读者不必要配置,但如果如果有更适合生产环境的配置,它也可以被更改。我们可以使用ALTER SYSTEM修改DISPATCHERS或SHARED SERVER。

启用Orache Shared Server

Oracle Shared Server的初始化参数

配置Dispatchers

监视Shared Server

启用和关闭Oracle Shared Server

一旦配置SHARED_SERVERS参数被配置成大于0,数据库即转换成Oracle Shared Server状态,这种情况Dispatcher默认为1

如果SHARED_SERVERS参数被清除,数据库即从Oracle Shared Server转换成专用服务器。

为了向后兼容,如果启动时Shared_servers没有指定,而Dispatcher被指定大于0的值,Shared_server即被启用,默认值为1

如何确定数据库正处于专用服务器状态或是Oracle Shared Server状态

在LSNRCTL中执行SERVICE指令,如果正处于专用服务器状态,结果应该像下面

LSNRCTL> service

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))

服务摘要..

服务 "PLSExtProc" 包含 1 个例程。

例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...

处理程序:

"DEDICATED" 已建立:0 已被拒绝:0

LOCAL SERVER

服务 "orcl" 包含 1 个例程。

例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...

处理程序:

"DEDICATED" 已建立:50 已拒绝:0 状态:ready

LOCAL SERVER

服务 "orclXDB" 包含 1 个例程。

例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...

处理程序:

"D000" 已建立:0 已被拒绝:0 当前: 0 最大: 1002 状态: ready

DISPATCHER (ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1126))

服务 "orcl_XPT" 包含 1 个例程。

例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...

处理程序:

"DEDICATED" 已建立:50 已拒绝:0 状态:ready

LOCAL SERVER

命令执行成功

如果正处于Oracle Shared Server状态,SERVICE指令的结果应该像下面

LSNRCTL> service

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))

服务摘要..

服务 "PLSExtProc" 包含 1 个例程。

例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...

处理程序:

"DEDICATED" 已建立:0 已被拒绝:0

LOCAL SERVER

服务 "orcl" 包含 1 个例程。

例程 "orcl", 状态 READY, 包含此服务的 6 个处理程序...

处理程序:

"DEDICATED" 已建立:121 已拒绝:0 状态:ready

LOCAL SERVER

"D001" 已建立:0 已被拒绝:0 当前: 0 最大: 1002 状态: ready     从D000至D001共有5个Dispatcher

DISPATCHER (ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1758))

"D000" 已建立:0 已被拒绝:0 当前: 0 最大: 1002 状态: ready

DISPATCHER (ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1757))

"D002" 已建立:0 已被拒绝:0 当前: 0 最大: 1002 状态: ready

DISPATCHER (ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1759))

"D003" 已建立:0 已被拒绝:0 当前: 0 最大: 1002 状态: ready

DISPATCHER (ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1760))

"D004" 已建立:1 已被拒绝:0 当前: 1 最大: 1002 状态: ready

DISPATCHER (ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1761))

服务 "orclXDB" 包含 1 个例程。

例程 "orcl", 状态 READY, 包含此服务的 0 个处理程序...

服务 "orcl_XPT" 包含 1 个例程。

例程 "orcl", 状态 READY, 包含此服务的 6 个处理程序...

处理程序:

"DEDICATED" 已建立:121 已拒绝:0 状态:ready

LOCAL SERVER

"D001" 已建立:0 已被拒绝:0 当前: 0 最大: 1002 状态: ready

DISPATCHER (ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1758))

"D000" 已建立:0 已被拒绝:0 当前: 0 最大: 1002 状态: ready

DISPATCHER (ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1757))

"D002" 已建立:0 已被拒绝:0 当前: 0 最大: 1002 状态: ready

DISPATCHER (ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1759))

"D003" 已建立:0 已被拒绝:0 当前: 0 最大: 1002 状态: ready

DISPATCHER (ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1760))

"D004" 已建立:1 已被拒绝:0 当前: 1 最大: 1002 状态: ready

DISPATCHER (ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1761))

命令执行成功

Oracle Shared Server的初始化参数

以下初始化参数控制Shared Server,它们都可以通过ALTER SYSTEM动态修改

SHARED_SERVERS: 指定实例启动时Shared_servers启动的最小值,这是Shared Server唯一必需的参数

例:ALTER SYSTEM SET SHARED_SERVERS=5

MAX_SHARED_SERVERS: 指定可以并发运行的最大数量SHARED SERVER

SHARED_SERVER_SESSIONS:指定共享服务器可以接受的最大会话数量,即使到了这个会话数量,专用连接也是可以进入的。

DISPATCHERS: 配置SHARED SERVER结构的DISPATCHERS数量

MAX_DISPATCHERS:指定可并发运行的最大数量DISPATCHER。这个参数现在可以被忽略,因为它只在以后的版本中,DISPATCHERS会根据连接数动态调节,的情况下有用。

CIRCUITS: 为入站或出站网络会话指定总的虚拟电路数量。一般它不应被手动修改。

决定Shared_servers的值

Shared_Servers参数指定数据库实例启动时至少启动的SHARED_SERVERS数量,实例启动后数据库可根据服务器的繁忙程度和请求队列的长度来启动更多的SHARED_SERVER

PMON不能把Shared_Server的数量减少到Shared_Servers的值以下,所以能使用该参数保证Shared_Servers的数量.

如果每个连接都有较少量的处理,每25个连接配置一个共享服务器应该是足够的。如果用户需要较大的结果集或密集型的处理,则应该减少平均每服务器处理的连接数

限制Shared Server的数量

参数MAX_SHARED_SERVERS参数指定可由PMON启动的最大Shared_Servers数量。它没有默认值,如果未被指定,PMON将根据需要启动。

SHARED_SERVERS的值覆盖MAX_SHARED_SERVER的值,因为你可以通过为SHARED_SERVERS指定较大的值,以此强制PMON启动超出MAX_SHARED_SERVER限制的进程数。

限制SHARED SERVER的进程数的主要原因是保留服务器资源,例如:

在备份的时候备份作业获取更大的资源

业务繁忙时防止过多的Shared_servers使得服务器当机

另一个原因是服务器调试和性能分析。例如慢慢增加Max_Shared_Servers直至用户不感觉到服务的延时。

限制SHARED SERVER的会话数量

SHARED_SERVER_SESSION参数限制SHARED_SERVER是的最大并发用户会话数,以此为直接连接保留会话数,以此确保使用直接连接执行管理任务时不会被Shared server占用完所有会话数。

它没有默认值,如果未被指定,系统将按需要启动,它受初始化参数SESSIONS限制

保护共享内存

CIRCUITS参数设置可以在共享内存中被启动的虚拟电路数量。它没有默认值,如果未被指定,系统将按需要启动,它受限于Dispatcher参数和系统资源。

配置Dispatcher

如果启动SHARED SERVER,而DISPATCHER又未被指定,数据库会至少启动一个Dispatcher,在这种情况下DISPATCHER配置如下:

dispatchers="(protocol=tcp)"

DISPATCHERS 初始化参数

网络协议地址通过一个或多个以下属性指定

Attribute

Description

ADDRESS

指定Dispatchers监听的网络协议地址

DESCRIPTION

指定Dispatchers监听的网络协议地址的描述。

PROTOCOL

指定Dispatchers监听的网络协议

以下属性指定启动多少个Dispatcher,默认为1

Attribute

Description

DISPATCHERS

指定初始启动的Dispatcher数量

以下属性告诉实例每个Dispatcher的网络属性。它们都是可选的。

Attribute

Description

CONNECTIONS

指定每个Dispatcher可启动的最大连接数Specify the maximum number of network connections to allow for each dispatcher.

SESSIONS

指定每个Dispatcher可启动的最大会话数

TICKS

Specify the duration of a TICK in seconds. A TICK is a unit of time in terms of which the connection pool timeout can be specified. Used for connection pooling.

LISTENER

PMON把连接信息发送到的那个监听器的地址。这个属性公在监听器为非本地监听器,使用一个不同于1521的监听端口,默认端口呼LOCAL_LISTENER参数还未得到指定,或监听器正在驻留在一个不同的网络节点上时才需要被设置。

MULTIPLEX

Used to enable the Oracle Connection Manager session multiplexing feature.

POOL

用来启用连接池特性

SERVICE

Dispatcher将向监听器中指定的Service列表注册。

你可以使用3个或更长的首字母作为参数的缩写。For example, you can specify SESSIONS=3, SES=3, SESS=3, or SESSI=3, and so forth.

决定Dispatchers的数量

一旦你知道操作系统上每个进程支持的最大连接数,可通过以下公式计算

Dispatchers数量=最大并发会话数/每个Dispatcher的每个连接数

假设系统支持每个进程970个连接,并且

最大并发TCP会话数为4000

最大并发SLL TCP会话数为2500

则根据(4000/9700) 和 (2500/970),Dispatcher应该这样配置

Dispatchers="(PROT=TCP)(DISP=5)(PROT=TCPS)(DISP=3)"

设置初始的Dispatchers数量

例:这是一个典型例子

Dispatchers="(PROT=TCP)(DISP=2)"

例:强制使用Dispatcher的地址

Dispatchers="(Address=(Protocol=tcp)(host=144.25.16.201))(dispatchers=2)"

例:强制使用Dispatcher的端口

Dispatchers="(Address=(Protocol=tcp)(Port=5000))"

Dispatchers="(Address=(Protocol=tcp)(Port=5001))"

修改Dispatchers的数量

根Shared_Servers不同,Dispatcher不会自动改变。你可以通过ALTER SYSTEM改变Dispatcher的数量。并且可以启动多于Max_Dispatchers数量的Dispatchers,因为Max_Dispatcher在将来的版本可能有用,但本版本中并不工作。

监视以下视图得知Dispatcher进程的负载

V$QUEUE -- 显示Dispatcher的请求和响应队列

V$DISPATCHER -- 显示各个Dispatcher的详细信息

V$DISPATCHER_RATE -- 显示Dispatcher的统计数据

这个视图可得知Dispatcher进程的负载,如果负载太高,则需要增加Dispatcher,反之减少。

当减少Dispatcher时,它不会马上减少,而且等用户断开连接后再减少。

当你改变Discription,address,protocol,connections,ticks,multiplex和POOL属性时,改变不会对现有Dispatchers生效,而只会对新Dispatcher生效。所以要想对所有Dispatcher生效,必需杀掉现有Dispatcher,让系统重新启动新Dispatcher.

关闭指定Dispatcher

为找到特定Dispatcher,可查询动态性能视图

Select Name,Network from V$DISPATCHER;

结果中,Dispatcher会以"Dnnn"的形式展示,所以关闭D001 Dispatcher可用以下命令

ALTER SYSTEM SHUTDOWN IMMEDIATE 'D001';

监视Shared Server

以下视图对于获取你的Shared Server配置和性能监视非常有用View

Description

V$DISPATCHER

提供DISPATCHER信息,包括名称,网络地址,状态, various usage statistics, and index number.

V$DISPATCHER_CONFIG

提供关于DISPATCHER的配置信息

V$DISPATCHER_RATE

提供DISPATCHER的统计信息

V$QUEUE

包含Shared Servers信息队列的信息

V$SHARED_SERVER

包含Shared Servers的信息

V$CIRCUIT

包含虚拟电路的信息,一种用户通过Dispatcher 和 Servers连接到数据库的东东。

V$SHARED_SERVER_MONITOR

包含调试Shared Server的信息

V$SGA

包含system global area (SGA) 的信息。可能会对于调试Shared Server非常有用。

V$SGASTAT

包含SGA的详细统计信息。

V$SHARED_POOL_RESERVED

列出统计信息以帮助调节保留池和共享池

调节共享服务器选项

调节共享服务器选项应该考虑到的地方

确保有足够的Dispatcher,以便客户没有正在等候Dispatcher响应它们的请求

确保有足够的Shared Server Process,以便没有请求正在等候得到处理

配置Large Pool SGA,以便有足够大的地方存储UGA。

配置Large Pool

在init.ora文件中参数LARGE_POOL_SIZE可以被配置成最小300K和至少2G的最大值,最大值跟操作系统相关

例:LARGE_POOL_SIZE = 50M

也可以使用Slter system修改

例:ALTER SYSTEM SET LARGE_POOL_SIZE=100M

当使用默认值时,共享服务器中的每个会话使Large pool增加250KB,并分配给该会话。

当Large Pool未被配置时,UGA会放在Shared Pool中,这会影响Shared Pool性能,所以应该配置一个Large Pool。

使用V$SGASTAT可检查LARGE POOL正使用的空间。FREE MEMORY显示可供使用的空间,SESSION HEAP显示已使用的空间

SQL> select *from v$sgastat where pool='large pool';

POOL         NAME                            BYTES

------------ -------------------------- ----------

large pool   PX msg pool                    206208

large pool   free memory                   7851120

large pool   session heap                   331280

SQL>

确定Large Pool大小

一般来说,每个连接需要1MB到3MB之间的内存

查询V$SESSTAT视图可得到所有连接中最大曾经分配的最大内存。把乘以预计的最大连接数即可得出Large Pool的大小.

SQL> select sum(value) "max mts memory allocated" from v$sesstat ss, v$statname

st where name = 'session uga memory max' and ss.statistic# = st.statistic#;

max mts memory allocated

------------------------

6167676

SQL>

确定是否有足够的Dispatcher

查询V$dispatcher可监视各Dispatcher进程,从而得知各Dispatcher有多繁忙。如果Dispatcher繁忙时间百分比超过50%,则需要考虑启动更多的调度程序。

以下例显示D000繁忙的比率大约只是0.001%

SQL> select  name, (busy/(busy + idle)) "dispatcher busy rate" from v$dispatcher

;

NAME dispatcher busy rate

---- --------------------

D000           .000121704

D001           .000042597

D002           .004935402

SQL>

测量用户等候Dispatcher程序多长时间

通过组合查询V$queue和V$dispatcher可得出结果

SQL> Select decode(sum(totalq), 0, 'no responses', sum(wait)/sum(totalq)) "avera

ge wait time" from V$QUEUE Q, V$DISPATCHER D WHERE Q.TYPE='DISPATCHER' AND Q.PAD

DR=D.PADDR;

average wait time

----------------------------------------

0

SQL>

确定是否有足够的共享服务器

下例显示请求队列中的平均等时间比0.3秒略多一点

SQL> Select decode(totalq,0,'No Requests') "Wait Time", Wait/totalq || ' hundred

ths of seconds' "Average Wait time per request" from V$QUEUE where type='COMMON'

;

Wait Time   Average Wait time per request

----------- --------------------------------------------------------------

.324324324324324324324324324324324324324 hundredths of seconds

SQL>

下例可看到服务器已经处理了多少个请求和信息,并可看到信息的总大小,并可看到自启动以来总繁忙的时间NAME

PADDR

STATUS

MESSAGES

BYTES

BREAKS

CIRCUIT

IDLE

BUSY

REQUESTS

S000

1EE4CBEC

WAIT(COMMON)

146

20872

0

00

287354

966

37

总结

定义直接连接只需使用net service定义参数server=dedicated

启动和关闭Shared server只需要定义Shared Servers参数

Shared Server会有PMON按繁忙程度启动或减少,我们可定义Shared Server的最小值和自动启动的最大值。

Dispatcher不会自动管理,所以需要手工定义。

oracle 10g管理地址,oracle10g管理共享服务器相关推荐

  1. Oracle 10g SGA 的自动化管理

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! --== ...

  2. Oracle 10g 下载地址

    Oracle 10g 下载地址 Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Microsoft ...

  3. ORACLE 10g下载|ORACLE 10g下载地址|ORACLE 10g官网下载地址

    ORACLE 10g下载地址 oracle 下载还需要用户名我自己注册了个方便大家使用下载 user:wangdetian168@gmail.com pass:qwe123QWE 密码是这个 一般不会 ...

  4. oracle 10g oem地址,Oracle 10g: The Top 20 Features for DBA-OEM

    Enterprise Manager 10g Finally, a tool that serves as one-stop-shop for Oracle administration and ma ...

  5. oracle 10g undo 管理,Oracle 10g undo表空间管理

    一.oracle 9i起,有两种undo管理方式:AUM Automatic Undo ManagementMUN Manual Undo Management建议使用 AUM ,下面只讨论AUM 一 ...

  6. oracle 10g rac 停止,Oracle10g RAC 关闭及启动

    情况1: 保养数据库及操作系统,服务器,需要关闭DB(所有实例),OS及Server . a. 首先停止Oracle10g 环境 $ lsnrctl stop (每个节点上停止监听,也可以用srvct ...

  7. oracle 10g xe 12505,ORACLE10g的ORA-12505问题解决方法

    ORACLE10g的ORA-12505问题解决方法 发布时间:2009-03-25   来源:飞华健康网医生组   90人关注 安装ORACLE10g后,创建用户,导入数据库脚本之后,用sqlplus ...

  8. oracle 10g clusterware,安装Oracle10g Clusterware遇到的一点问题

    在vmware上安装一个双节点的Redhat Linux + Oracle10g RAC + ASM的测试环境,按照Oracle官方网站的安装指南,基本都很顺利,只是在clusterware的安装过程 ...

  9. oracle 10g 更换ocr,Oracle10g RAC在线更换OCR votedisk

    操作之前确认集群状态都正常 1.替换OCR # ./ocrconfig -replace ocrmirror /dev/rhdisk11 # ./ocrcheck Status of Oracle C ...

  10. CentOS5.6环境安装oracle 10g(完整版)

    1.安装前装备 1.1 硬件要求 要求 查看方式 内存 至少1G内存 grep MemTotal /proc/meminfo SWAP 如果内存为大于512M则swap大小为内存2倍 如果内存在1到2 ...

最新文章

  1. 如何找到Kafka集群的吞吐量极限?\n
  2. Jenkins X基本概念:Jenkins K8S helm Draft gitops
  3. C#正则表达式MatchCollection类浅析
  4. 科普: 中间件底层实现的分布式协议之Raft
  5. Webclient UI view里Javascript的注释问题
  6. 程序员新人怎样在复杂代码中找 bug?
  7. 【UOJ575】光伏元件【网络流建图】【上下界网络流】【费用流】
  8. maven工程使用spring-boot-devtools进行热部署,更改代码避免重启web容器
  9. 苹果正面临电源芯片短缺问题 可能影响iPhone 12供应
  10. python基础7--socket
  11. 艾伟_转载:单元测试之道(使用NUnit)
  12. 【运动学】基于matlab质点运动规律【含Matlab源码 976期】
  13. idea中导包的快捷键
  14. 医学知识图谱构建关键技术及研究进展
  15. tolower()函数用法
  16. 被遗忘的数学家!曾提出最接地气的数学定理,可以计算男朋友真不真心的那种......
  17. OpenCV提取图像中的垂直线(或者水平线)
  18. robot framework RIDE实现鼠标拖拽
  19. 计算机教师帮扶记录,教师结对帮扶工作总结范文(通用6篇)
  20. 学生信息管理系统中系统登录问题

热门文章

  1. 认知维度与API的可用性评估
  2. Jenkins + Docker 简单部署 node.js 项目
  3. poj 1328 贪心+qsort
  4. 大型网站的特点及优化方向是什么
  5. 统计某个路径下的总文件个数,及总行数(不含空行)
  6. C语言 第二章 数据类型、变量和输入函数
  7. python3 爬虫
  8. 光缆成端接头的含义是指
  9. tcpdump和wireshark抓包方法介绍
  10. Linux音频驱动-ALSA概述