网络面经总结-仅供参考
网络面经总结-仅供参考
- 1 服务器如何判断客户端连接不上了
- 1.1 recv
- 1.2 服务器一段时间内没接收到客户端心跳包反馈
- 1.3 struct tcp_info info
- 1.4[保活参数](https://blog.csdn.net/chrisnotfound/article/details/80111559)
- 1.5 TCP Keepalive HTTP Keep-Alive 的关系
- 2 心跳包多长时间发一次,如何判断客户端下线了
- 3 四次挥手 通过什么接口来判断?????
- 4 epoll只能练500-1000个连接,有没有判断是什么原因引起的
- 5 noSQL-redis
- 6 消息队列-应用场景
- 7 [微服务容器](https://www.cnblogs.com/jsjwk/p/11169296.html)
- 7.1微服务容器操作
- 容器基本操作
- 镜像
- 8 虚函数析构函数和普通虚函数区别,及原因,析构顺序
- 10 [Redis为什么是单线程的](https://blog.csdn.net/wanderlustlee/article/details/81148840)
- 11 不同机器进程间如何通信:
- 12 服务器如何转发消息的
- 14 西安发消息到上海,接收方消息延迟了,原因
- 15客户端发了很多消息,服务器怎么及时处理?
- 16[客户端收到大量数据会导致客户端卡顿,怎么优化?](https://www.cnblogs.com/marvin/p/4227431.html)
- 17. 十几个日志文件,用什么shell命令可以筛选出自己想要的日志内容
- 18. 客户端连接不上服务器的问题一般怎么定位?(未解决)
- 19. [多进程文件怎么共享,为什么要用mmap。](https://blog.csdn.net/tencupofkaiwater/article/details/88897529)
- 20. [vi打开文件后,怎么替换无数个想要替换的内容](https://blog.csdn.net/GorgeousChou/article/details/79809229)
- 21. 10W个用户怎么连接服务器
- 22. select可以连接2000个客户端吗?
- 23. libevent怎么用的?
- 24. 链表顺序不变,如何排序
- 25. 硬盘大小不变,服务器只能连接1000个,要连10万个怎么办?
- [26 tcp客户端能连接的最大长连接,与几个因素有关,可以超越65536](https://blog.csdn.net/daiyudong2020/article/details/77852049)
- [27 ping一个域名的过程](https://blog.csdn.net/guoweimelon/article/details/50865642)
- 28 [客户端架构设计](https://blog.csdn.net/birthmarkqiqi/article/details/78243979)
- [29 TCP和UDP的区别和优缺点](https://blog.csdn.net/xiaobangkuaipao/article/details/76793702)
- 30 [一个 SQL 执行的很慢的原因](https://www.cnblogs.com/myseries/p/10719074.html)
- 31 如何查看SQL语句的执行状态,知道这条命令吗
- 32 什么是进程,进程包括哪些数据?进程切换的过程是怎么样的
- 33 网络建立连接之后是怎么关闭的(四次挥手)。
- 34服务器出现大量time_wait 状态的连接原因?(长链接四次挥手出现了丢包、超时等),假如不会出现丢包、超时等,网络非常流畅呢?(短连接导致的)那怎么解决?
- 35 [负载均衡](https://www.cnblogs.com/hackerer/p/10407603.html)
- 36 端口号范围
- 37 [IO瓶颈](https://blog.csdn.net/datuzijean/article/details/88655210)
- 37.1 什么样的服务容易出现IO瓶颈
- 37.2 [具体排查方法](https://www.cnblogs.com/muahao/p/6438409.html)
- 38
1 服务器如何判断客户端连接不上了
1.1 recv
recv()返回值小于等于0,如果errno == EINTR 则说明recv函数是由于程序接收到信号后返回的,socket连接还是正常的,不应close掉socket连接。
1.2 服务器一段时间内没接收到客户端心跳包反馈
1.3 struct tcp_info info
struct tcp_info info;
int len=sizeof(info);
getsockopt(sock, IPPROTO_TCP, TCP_INFO, &info, (socklen_t *)&len);
if((info.tcpi_state==TCP_ESTABLISHED)) 则说明未断开 else 断开
1.4保活参数
设置后,若断开,则在使用该socket读写时立即失败,并返回ETIMEDOUT错误
1.5 TCP Keepalive HTTP Keep-Alive 的关系
HTTP协议的Keep-Alive意图在于TCP连接复用,同一个连接上串行方式传递请求-响应数据;TCP的Keepalive机制意图在于探测连接的对端是否存活。
2 心跳包多长时间发一次,如何判断客户端下线了
–(局域网内)3秒发一次,服务器10秒没收到客户端心跳包认为下线
3 四次挥手 通过什么接口来判断?????
– struct tcp_info info;
int len=sizeof(info);
getsockopt(sock, IPPROTO_TCP, TCP_INFO, &info, (socklen_t *)&len);
if((info.tcpi_state==TCP_ESTABLISHED)) 则说明未断开 else 断开
4 epoll只能练500-1000个连接,有没有判断是什么原因引起的
1)linux系统会限制文件打开个数(ulimit -a查看),
–临时修改
ulimit -HSn 2048
–永久修改
vi /etc/security/limits.conf
2)服务器硬件限制
5 noSQL-redis
6 消息队列-应用场景
作用:异步处理,应用解耦,流量削锋和消息通讯
7 微服务容器
7.1微服务容器操作
容器基本操作
1 查看docker信息 sudo docker info
2 运行容器 sudo docker run -i -t ubuntu /bin/bash
3 在容器中可以安装软件和我们外面的linux机器一样,只是不一样的ubuntu和centos命令不一样
4 列出容器 sudo docker ps -a
(-a 包括没有运行的)
5 启动容器的时候可以给容器命名 sudo docker run --name firstContainername -i -t ubuntu /bin/bash
6 停止容器 sudo docker stop firstContainername (restart)
7 附着进入容器 sudo docker attach firstContainername
8 后台运行容器 sudo docker run -d -i -t ubuntu /bin/bash
9 获取容器日志 sudo docker logs firstContainername
10 持续跟踪容器日志 sudo docker logs -f firstContainername
11 持续跟踪容器日志,并打印时间 sudo docker logs -ft firstContainername
12 可以将日志重定向到宿主机,也有一些日期驱动 sudo docker run --logs-driver="syslog" --name firstContainername -d
使用syslog的日志驱动,关于日志驱动百度
13 查看容器内的进程 sudo docker to firstContainername
14 统计容器的内存,网络,cpu,io等的指标 sudo docker stats firstContainername
15 在后台运行的容器内执行命令 sudo docker exec -d firstContainername touch /etc/new_config_file
16 进入容器 sudo docker exec -it firstContainername /bin/bash
17 停止容器 sudo docker stop firstContainername
18 自动重启 sudo docker run --restart=always --name firstContainername -d ubuntu /bin/sh --restart=always
无论什么情况停止都会重启,还可以加参数 --restart=on-failure:5 退出代码为非0时重启5次
19 获取容器信息 sudo docker inspect firstContainername
20 删除容器 sudo docker rm firstContainername
21 删除所有容器 sudo docker rm ‘sudo docker ps -a -q’ -a返回所有容器 -q只返回容器的id
22 备份容器 docker commit -p 30b8f18f20b4 container-backup
1)->登录 docker login
->打包:docker tag a25ddfec4d2a arunpyasi/container-backup:test
->上传到注册中心:docker push arunpyasi/container-backup
->恢复容器:docker pull arunpyasi/container-backup:test
2)->备份在本地:docker save -o ~/container-backup.tar container-backup
->恢复容器: docker load -i ~/container-backup.tar
3)->加载的镜像去运行Docker容器:docker run -d -p 80:80 container-backup
docker pull: 从仓库中拖镜像
docker run:创建容器
docker stop:停止容器运行
docker start:开始容器运行
docker commit:提交容器到镜像
docker images: 查看当前有的镜像
docker ps:查看当前启动的容器 docker ps -a 列出当前系统所有的容器
镜像
1 列出所有镜像 sudo docker images
2 拉取镜像 sudo docker pull ubuntu
可以指定版本号,不指定为默认最新的镜像
3 查找镜像 sudo docker search ubuntu
4 注册docker账号后就可以使用 docker login命令进行登录
5 可以拉取一个centos镜像 sudo docker pull centos 然后运行 sudo docker run -it --name centosContener centos /bin/bash 进入容器安装vim yum -y install vim 退出容器 exit 提交容器 sudo docker commit -m"信息" -a “作者” centosContener 镜像用户名/仓库名:标签
6 查看镜像的信息 sudo docker inspect 镜像用户名/仓库名:标签
7 Dockerfile
FROM centos
RUN yum -y install nginx
EXPOSE 80
sudo docker build -t=“镜像用户名/仓库名:标签”
8 构建镜像时禁用缓存 sudo docker build --no-cache -t=“镜像用户名/仓库名:标签”
9 查看docker镜像的构建历史 sudo docker history centos 实例 sudo docker history zhaoqinrong/centos:test
10 查看容器端口的映射情况 sudo docker port centosContener 80 会返回映射到宿主机上的端口
11 端口绑定 sudo docker run --name firstContainername -p 80 -d zhaoqinrong/centos
sudo docker run --name firstContainername -p 8080:80 -d zhaoqinrong/centos
sudo docker run --name firstContainername -p 127.0.0.1:8080:80 -d zhaoqinrong/centos
sudo docker run --name firstContainername -p 映射ip:映射到宿主机的端口:容器端口 -d zhaoqinrong/centos
sudo docker run --name firstContainername -p -d zhaoqinrong/centos 将构建镜像中的dockerfile文件中的EXPOSE的所有端口公开,并随机绑定到宿主机的端口上
12 Dockerfile 中的CMD命令,RUN命令是在构建中,docker容器未启动时作用,而CMD是在启动后执行的命令
CMD["/bin/bash","-l"]
8 虚函数析构函数和普通虚函数区别,及原因,析构顺序
析构函数不一定必须是虚函数,是否为虚函数取决于该类的使用,一般该类为基类产生继承和多态时,才会是虚函数,单独使用可以不是虚函数。之所以在继承和多态时设计为虚函数是因为当new派生类并且用基类指针指向这个派生类,在销毁基类指针时只会调用基类的析构函数,不会调用派生类的析构函数,因为基类无法操作派生类中非继承的成员,这样就造成派生类只new无法delete造成内存泄露。 2.默认不是虚析构函数是因为如果析构函数为虚函数就需要编译器在类中增加虚函数表来实现虚函数机制,这样所需内存空间就更大了,因此没有必要默认为虚析构函数。
class B
{}
class C : public B
{}
class D : public B
{}
D* pD = new D();//pD的静态类型是它声明的类型D*,动态类型也是D*
B* pB = pD;//pB的静态类型是它声明的类型B*,动态类型是pB所指向的对象pD的类型D*
C* pC = new C();
pB = pC;//pB的动态类型是可以更改的,现在它的动态类型是C*
构造:先基类,后派生类
析构:先派生类,后基类
class B{virtual void vfun(int i = 10){cout << "B:vfun, i = " << i;cout << endl;};public:void modfuc(){vfun();}virtual~B(){cout << "B:~vfun" << endl;}};class D : public B{virtual void vfun(int i = 20){cout << "D:vfun, i = " << i;cout << endl;};void modfuc(){vfun();}public:~D(){cout << "D:~vfun" << endl;}};int main(){D* pD = new D();B* pB = pD;pB->modfuc();//调用子类vfunc,但是入参是默认参数,静态绑定的所以输出为10,调用基类的i=10delete pD;}
9 边沿触发和水平触发区别,边沿触发会引发什么问题
Level Triggered (LT) 水平触发
.socket接收缓冲区不为空 有数据可读 读事件一直触发
.socket发送缓冲区不满 可以继续写入数据 写事件一直触发
符合思维习惯,epoll_wait返回的事件就是socket的状态
Edge Triggered (ET) 边沿触发
.socket的接收缓冲区状态变化时触发读事件,即空的接收缓冲区刚接收到数据时触发读事件
.socket的发送缓冲区状态变化时触发写事件,即满的缓冲区刚空出空间时触发读事件
仅在状态变化时触发事件
LT的编程与poll/select接近,符合一直以来的习惯,不易出错
ET的编程可以做到更加简洁,某些场景下更加高效,但另一方面容易遗漏事件(只提醒一次,需循环接收accept()),容易产生bug
10 Redis为什么是单线程的
原因一:redis本身就是基于内存操作的,所以每个操作执行速度都很快。
原因二:redis中的数据结构比较简单,对数据的操作也就比较快。
11 不同机器进程间如何通信:
socket
12 服务器如何转发消息的
ret = recv(*(int *)arg, &RecvBuf, sizeof(RecvBuf), 0);
ret = send(RecvBuf.ToFd, &RecvBuf, sizeof(RecvBuf), 0);
接收客户端A的消息包,从包中取出A需要发送到B的地址,然后服务器把A的消息转发给B
服务器如何转发离线消息(消息队列)
14 西安发消息到上海,接收方消息延迟了,原因
网络原因+客户端内存
15客户端发了很多消息,服务器怎么及时处理?
(多线程+消息队列/缓冲区)
亿万级客户端:搭建服务器集群按业务划分去处理,各个业务服务器之前可以加负载均衡,使用户均匀的分布在各个服务器上。
优点:当某一个服务器故障,不会影响所有用户,只会影响到连接到这个服务器的用户。
16客户端收到大量数据会导致客户端卡顿,怎么优化?
17. 十几个日志文件,用什么shell命令可以筛选出自己想要的日志内容
grep -r key 路径
18. 客户端连接不上服务器的问题一般怎么定位?(未解决)
ping、检查IP/PORT、netstat xxx查询连接状态
19. 多进程文件怎么共享,为什么要用mmap。
mmap优点总结
由上文讨论可知,mmap优点共有一下几点:
1、对文件的读取操作跨过了页缓存,减少了数据的拷贝次数,用内存读写取代I/O读写,提高了文件读取效率。
2、实现了用户空间和内核空间的高效交互方式。两空间的各自修改操作可以直接反映在映射的区域内,从而被对方空间及时捕捉。
3、提供进程间共享内存及相互通信的方式。不管是父子进程还是无亲缘关系的进程,都可以将自身用户空间映射到同一个文件或匿名映射到同一片区域。从而通过各自对映射区域的改动,达到进程间通信和进程间共享的目的。
20. vi打开文件后,怎么替换无数个想要替换的内容
:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
21. 10W个用户怎么连接服务器
–每个连接一个fd,linux加大文件打开数限制,加心跳包
–单服务器只有多线程配合强大硬件。最好用多服务器,使用队列协同。
–服务器ip、服务器端口、客户端ip、客户端端口4个因素形成一条唯一连接。记得服务器的ip和端口总是不变的,就是监听的那个。所以不存在端口不够用的问题
–负载均衡和服务器的集群
NIO模型:
来源连接
分离:登录服务器、通讯服务器、消息服务器 和 数据库服务器;
◎登录服务器(有状态):除给Client提供登录和分配通讯服务器外,重点功能是提供关于用户目前连接在哪台服务器上的查询,所以所有查询基本基于缓存完成;考虑到单点故障问题,登录服务器应双机冗余,但不能太多,否则双机之间的缓存同步代价太高;缓存可使用开源组件。
◎通讯服务器(有状态):负责维护消息长连接,以及消息的收发;通讯服务器缓存自身的所有用户连接信息,和部分(这个要时情况动态调整)非自身的热点用户连接信息(即该用户连在哪台通讯服务器上);消息到达时,将消息转发给消息服务器进行落地;然后根据目标最终用户先查询本地表,查不到就去查询登录服务器;然后直接寻找目标通讯服务器,发送消息到达的通知;通讯服务器的问题是没有Failover,但是也不重要,客户端连接不上就由登录服务器重新分配新的通讯服务器来提供服务即可。
◎ 消息服务器(无状态):负责接收通讯服务器所发来的消息,批量写入数据库中,以及供其它消息服务器存取;另外也提供历史消息查询这类辅助性功能;因为是无状态,所以集群较为简单,略。
◎ 数据库服务器:略。
22. select可以连接2000个客户端吗?
select上限1024个
23. libevent怎么用的?
24. 链表顺序不变,如何排序
数组存指针有序的指向链表节点,输出
25. 硬盘大小不变,服务器只能连接1000个,要连10万个怎么办?
linux加大文件打开数限制
负载均衡和服务器的集群
26 tcp客户端能连接的最大长连接,与几个因素有关,可以超越65536
(1) 进程能打开的最大描述符
(2) IP_TABLE的限制
(3) 临时端口范围
(4) 内存大小
$ echo “655350” > /proc/sys/fs/file-max
$ vi /etc/security/limits.conf
* soft nofile 655350
* hard nofile 655350
三、调整临时端口范围与IP_TABLE限制(centos7)
$ vim /etc/sysctl.conf
#临时端口范围
net.ipv4.ip_local_port_range = 10000 65535#Linux网络内核的IP_TABLE防火墙对最大跟踪的TCP连接数有限制
net.netfilter.nf_conntrack_max = 655350
net.nf_conntrack_max = 655350
27 ping一个域名的过程
28 客户端架构设计
从上至下为:
l 表示层
l 业务规则层
l 业务逻辑层或称为领域层
l 数据访问层
29 TCP和UDP的区别和优缺点
主机每次发送数据时,TCP就给每个数据包分配一个序列号并且在一个特定的时间内等待接收主机对分配的这个序列号进行确认,
如果发送主机在一个特定时间内没有收到接收主机的确认,则发送主机会重传此数据包。
接收主机利用序列号对接收的数据进行确认,以便检测对方发送的数据是否有丢失或者乱序等,
接收主机一旦收到已经顺序化的数据,它就将这些数据按正确的顺序重组成数据流并传递到高层进行处理。
3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
4.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP对系统资源要求较多,UDP对系统资源要求较少。
6、UDP丢包(服务端增加缓冲区),乱序( 发送端给数据设置序号,接收端对数据包根据序号做排序处理)
7、TCP有流量控制和拥塞控制
流量控制:对发送方发送速率的控制
拥塞控制:TCP引入 慢启动 机制, 先发少量的数据, 探探路, 摸清当前的网络拥堵状态, 再决定按照多大的速度传输
2)、为什么UDP有时比TCP更有优势?
UDP以其简单、传输快的优势,在越来越多场景下取代了TCP,如实时游戏
(1)网速的提升给UDP的稳定性提供可靠网络保障,丢包率很低,如果使用应用层重传,能够确保传输的可靠性。
(2)TCP为了实现网络通信的可靠性,使用了复杂的拥塞控制算法,建立了繁琐的握手过程,由于TCP内置的系统协议栈中,极难对其进行改进。
采用TCP,一旦发生丢包,TCP会将后续的包缓存起来,等前面的包重传并接收到后再继续发送,延时会越来越大,基于UDP对实时性要求较为严格的情况下,采用自定义重传机制,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成影响。
30 一个 SQL 执行的很慢的原因
1、大多数情况下很正常,偶尔很慢,则有如下原因
(1)、数据库在刷新脏页,例如 redo log 写满了需要同步到磁盘。
(2)、执行的时候,遇到锁,如表锁、行锁。
2、这条 SQL 语句一直执行的很慢,则有如下原因。
(1)、没有用上索引:例如该字段没有索引;由于对字段进行运算、函数操作导致无法用索引。
(2)、数据库选错了索引。
31 如何查看SQL语句的执行状态,知道这条命令吗
show processlist
32 什么是进程,进程包括哪些数据?进程切换的过程是怎么样的
1、系统进行资源分配和调度的基本单位
2、代码段, 数据段, 堆, 栈
3、切换页目录以使用新的地址空间->切换内核栈和硬件上下文
33 网络建立连接之后是怎么关闭的(四次挥手)。
34服务器出现大量time_wait 状态的连接原因?(长链接四次挥手出现了丢包、超时等),假如不会出现丢包、超时等,网络非常流畅呢?(短连接导致的)那怎么解决?
原因:(长链接:丢包,超时;或短连接导致)
进入TIME_WAIT状态等待2MSL主要有两个目的:一方面是主动关闭连接的一方在对方没有收到最后一个ACK包时(这时对方还会重发FIN,收到两个FIN的时间间隔一定小于2MSL)有时间可以重发ACK包,另一方面处于TIME_WAIT的连接(IP和端口组合)不能重用,这样可以保证被重新分配的socket不会受到之前残留的延迟重发报文影响。
1) 由于主动关闭TCP连接的一方才会进入TIME_WAIT状态,一般情况服务器端不会出现TIME_WAIT状态,因为大多数情况都是客户端主动发起连接并主动关闭连接。但是某些服务如pop/smtp、ftp却是服务端收到客户端的QUIT命令后主动关闭连接,这就造成这类服务器上容易出现大量的TIME_WAIT状态的连接,而且并发量越大处于此种状态的连接越多。另外,对于被动关闭连接的服务在主动关闭客户端非法请求或清理长时间不活动的连接时(这种情况很可能是客户端程序忘记关闭连接)也会出现TIME_WAIT的状态。
2) 从根本上去优化我们的系统架构设计,减少不必要的短连接请求
解决办法:
1、 看一下现在time_wait的数量
netstat -an | grep TIME_WAIT | wc -l
2、发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,在 /etc/sysctl.conf中加入
net.ipv4.tcp_tw_recycle = 1 (表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭)
net.ipv4.tcp_fin_timeout=30 (修改系統默认的 TIMEOUT 时间
然后执行 /sbin/sysctl -p 让参数生效。
3、看看系统的tcp参数情况
sysctl -a|grep tcp
35 负载均衡
七层负载均衡基本都是基于http协议的,适用于web服务器的负载均衡。(nginx)
- 四层负载均衡主要是基于tcp协议报文,可以做任何基于tcp/ip协议的软件的负载均衡。(haproxy、LVS)
- 两者主要区别在于利用的报文所在的层面是不同的,各有各的好处。
- 七层应用负载的好处,是使得整个网络更”智能化“。例如访问一个网站的用户流量,可以通过七层的方式,将对图片类的请求转发到特定的图片服务器并可以使用缓存技术;将对文字类的请求可以转发到特定的文字服务器并可以使用压缩技术。当然这只是七层应用的一个小案例,从技术原理上,这种方式可以对客户端的请求和服务器的响应进行任意意义上的修改,极大的提升了应用系统在网络层的灵活性。很多在后台,例如Nginx或者Apache上部署的功能可以前移到负载均衡设备上,例如客户请求中的Header重写,服务器响应中的关键字过滤或者内容插入等功能。
- 四层负载均衡主要是较为灵活,可以作为多种软件的负载均衡器。
七层应用负载优点:
1)是使得整个网络更"智能化"。例如访问一个网站的用户流量,可以通过七层的方式,将对图片类的请求转发到特定的图片服务器并可以使用缓存技术;将对文字类的请求可以转发到特定的文字服务器并可以使用压缩技术。当然这只是七层应用的一个小案例,从技术原理上,这种方式可以对客户端的请求和服务器的响应进行任意意义上的修改,极大的提升了应用系统在网络层的灵活性。很多在后台,例如Nginx或者Apache上部署的功能可以前移到负载均衡设备上,例如客户请求中的Header重写,服务器响应中的关键字过滤或者内容插入等功能。
4.2) 安全性
七层负载均衡由于具有OSI模型的全部功能,能更容易抵御来自网络的攻击;四层模型从原理上讲,会直接将用户的请求转发给后端节点,无法直接抵御网络攻击。
4.3) 复杂度
四层模型一般比较简单的架构,容易管理,容易定位问题;七层模型架构比较复杂,通常也需要考虑结合四层模型的混用情况,出现问题定位比较复杂。
4.4) 效率比
四层模型基于更底层的设置,通常效率更高,但应用范围有限;七层模型需要更多的资源损耗,在理论上讲比四层模型有更强的功能,现在的实现更多是基于http应用。
36 端口号范围
端口的取值范围是:0-65535。
在这个取值范围中1023以下的端口已经分配给了常用的一些应用程序,这个数字以后的端口部分被使用,所以网络编程可用的端口一般在1024之后选取
系统端口(Well known port)
系统端口范围:0~1023
系统端口由IANA负责分配。需要走申请流程,申请手续最为严格。
用户端口(Registered port)
用户端口范围:1024~49151
用户端口由IANA负责分配。需要走申请流程,申请手续相对系统端口来说不那么严格。
动态端口(Private port)
动态端口范围:49152~65535
动态端口不在IANA的分配范围,应用程序可以在不用申请这些端口的情况下使用这些端口,但是,有个问题,因为这些端口可能会被其他应用程序或者操作系统使用,所以,我们不能假定这些端口在任意时间都可用,因此,不能将这些端口用于标示一个服务。
37 IO瓶颈
37.1 什么样的服务容易出现IO瓶颈
1.IO密集型服务(例如数据库,文件存储服务dfs等)
2.含有大量读写的服务(服务日志写入庞大,文件读取频繁)
3.含有持久化功能的服务(Redis、MQ等)
37.2 具体排查方法
3.iotop查看IO高的进程,strace -p PID 或 lsof -p PID 查看具体进程操作。
补充说明
IO密集型在产生IO瓶颈的时候,负载会高,但CPU百分比未必一定会高,所以要通过iostat、iotop等工具去确认是否是IO瓶颈。
38
close-on-exec
fork底层实现
epoll底层实现即结构
第三方工具查看CPU占用情况
:top,vmstat,dstat
什么是B+树
网络面经总结-仅供参考相关推荐
- 网络协议分析(仅供参考,后面的wireshark抓包内容最好自己看书研究)
必须掌握ARP协议的格式.工作原理和过程.功能,arp命令主要参数等 Arp协议被称为地址解析协议,功能是在同一局域网中,进行mac寻址完成ip到mac的映射,因为局域网中,信息的交流要通过mac地址 ...
- 数字IC笔试题,大疆校招16题(仅供参考)
\\\插播一条: 自己在今年整理一套单片机单片机相关论文800余篇 论文制作思维导图 原理图+源代码+开题报告+正文+外文资料 想要的同学私信找我. 数字IC笔试题,大疆校招16题(仅供参考) 1.异 ...
- 天线的S11,S12,S21,S22参数解析(个人理解仅供参考)
注:仅代表个人的理解,仅供参考 一般测试无源端口一般只用看S11,S21 看下图 我们输入的 A1 --> 双口 <--A2 需要隔离的 需要隔离的 B1 <-- 网络 B2 --& ...
- 中国高校与研究院所计算机学科分专业点评(本贴内容仅供参考!)
[2014/4/13:近5年来中科院系统经历了一些较大的变化,如人员流动,实验室更名等,以下部分内容未能因此更新,故可能失效甚至有较大误导,请大家自己注意辨别,有问题请向现任版主和中科院学生了解.时间 ...
- 浅谈短视频背后的社会道德伦理问题(个人观点,仅供参考)
浅谈短视频背后的科技伦理问题(个人观点,仅供参考) 本文根据最近发布的一则新闻:<真实的现场:快手移动连麦技术在抗疫报道中的创新应用>和之前的一篇报道: <算法不是三观不正的&quo ...
- 大数据练习题答案(仅供参考)
上一篇练习题的答案,题目里带括号的都是批注,如果看的不清楚,可以去我的资源下载(资源里批注清楚,都是红色批出来的) 一.选择题 Hadoop作者 ( C ) A.Martin Fowler B.Ken ...
- 信息与通信工程——重要国际学术会议和国际顶级期刊(仅供参考)
一.信息与通信工程的重要国际学术会议 主要包含两类: A类会议:本学科最顶尖级水平的国际会议: B类会议:学术水平较高.组织工作成熟.按一定时间间隔系列性召开的国际会议. A类会议(序号不表示优先顺序 ...
- 【jsp学籍管理系统——开题报告 分享(仅供参考呀)】
目录 一.本课题研究背景及意义: 二.本课题国内研究及现状: 三.本课题用到的主要技术: 四.参考文献:(仅供参考呀!) 五.本课题要研究或解决的问题和拟采用的研究手段(途径): 一.本课题研究背景及 ...
- 【学生请假系统——开题报告 分享(仅供参考呀)】
目录 一.研究目的和意义: 二.课题研究现状: 三.课题研究主要内容.实施方案及创新点: 四.课题进度安排: 五.主要参考文献:(仅供参考呀!) 一.研究目的和意义: 1.研究目的 开发高校学生请假系 ...
最新文章
- [JAVA] java仿windows 字体设置选项卡
- 合肥学院计算机论文,《合肥学院毕业论文模版》.doc
- C++ 虚函数、多态
- CSS的alt:图片无法显示时候显示alt内容
- iOS 获取当前对象所在的VC
- 计算机与广播电视论文,浅谈广播电视中计算机技术的作用论文.pdf
- Python笔记-假设检验之单样本T检验
- CSS:position属性和z_index
- php poedit怎么debug,php – 使用Poedit与XAMPP
- java中验证国际手机号码
- sqoop与PG库导入导出数据
- VMware连接不上网络解决办法
- 产品调研,如何避免「浮于表面」?
- CuO-SBA-15分子筛催化氧化苯甲醇制苯甲醛|单宁酸修饰磁性Fe3O4/SBA-15纳米粒子|CuO/SBA-15介孔材料催化剂
- 纯OC实现iOS DLNA投屏功能了解一下
- pthread_cancel pthread_testcancel测试
- 20道高频面试题(含答案),手慢无
- 不同调制方式对信道容量影响的分析
- 二进制在算法编写中的常用概念
- 保姆级-红米AC2100之breed不死后台刷写openwrt官方版第三方改良版
热门文章
- php神盾解密工具 注册码_教你如何解密 “ PHP 神盾解密工具 ”
- 我不接私活了,抱歉!
- delphi DCC32命令行方式编译delphi工程源码
- 一个大二博主的一年来写博的年终总结与未来展望——致2019努力的自己,也致2020更好的自己
- 我对阿凡达与现实社会的理解
- Android 手机上安装并运行 Ubuntu 12.04
- qq音乐登录参数详细分析及密码加密最新版
- Loadrunner基础使用
- android 内置默认输入法
- Linux环境 网络流量统计/proc/net/dev和/proc/net/snmp