go语言指针面试题 golang 接口 指针类型 值类型( 七 )


这个keepalive_timout时间值意味着:一个http产生的tcp连接在传送完最后一个响应后 , 还需要hold住keepalive_timeout秒后,才开始关闭这个连接 。
特别注意TCP层的keep alive和http不是一个意思 。TCP的是指:tcp连接建立后,如果客户端很长一段时间不发送消息 , 当连接很久没有收到报文,tcp会主动发送一个为空的报文(侦测包)给对方,如果对方收到了并且回复了,证明对方还在 。如果对方没有报文返回,重试多次之后则确认连接丢失 , 断开连接 。
tcp的keep alive可通过
net.ipv4.tcp_keepalive_intvl = 75// 当探测没有确认时,重新发送探测的频度 。缺省是75秒 。
net.ipv4.tcp_keepalive_probes = 9 //在认定连接失效之前,发送多少个TCP的keepalive探测包 。缺省值是9 。这个值乘以tcp_keepalive_intvl之后决定了,一个连接发送了keepalive之后可以有多少时间没有回应
【go语言指针面试题 golang 接口 指针类型 值类型】net.ipv4.tcp_keepalive_time = 7200 //当keepalive起用的时候,TCP发送keepalive消息的频度 。缺省是2小时 。一般设置为30分钟1800
修改:
可以
tcp是面向连接的,upd是无连接状态的 。
udp相比tcp没有建立连接的过程 , 所以更快,同时也更安全,不容易被攻击 。upd没有阻塞控制,因此出现网络阻塞不会使源主机的发送效率降低 。upd支持一对多,多对多等,tcp是点对点传输 。tcp首部开销20字节,udp8字节 。
udp使用场景:视频通话、im聊天等 。
time-wait表示客户端等待服务端返回关闭信息的状态,closed_wait表示服务端得知客户端想要关闭连接,进入半关闭状态并返回一段TCP报文 。
time-wait作用:
解决办法:
close_wait:
被动关闭,通常是由于客户端忘记关闭tcp连接导致 。
根据业务来啊~
重要指标是cardinality(不重复数量),这个数量/总行数如果过?。ㄇ鹘?)代表索引基本没意义,比如sex性别这种 。
另外查询不要使用select *,根据select的条件+where条件做组合索引 , 尽量实现覆盖索引,避免回表 。
僵尸进程:
即子进程先于父进程退出后,子进程的PCB需要其父进程释放,但是父进程并没有释放子进程的PCB , 这样的子进程就称为僵尸进程,僵尸进程实际上是一个已经死掉的进程 。
孤儿进程:
一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程 。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作 。
子进程死亡需要父进程来处理,那么意味着正常的进程应该是子进程先于父进程死亡 。当父进程先于子进程死亡时 , 子进程死亡时没父进程处理,这个死亡的子进程就是孤儿进程 。
但孤儿进程与僵尸进程不同的是,由于父进程已经死亡,系统会帮助父进程回收处理孤儿进程 。所以孤儿进程实际上是不占用资源的,因为它终究是被系统回收了 。不会像僵尸进程那样占用ID,损害运行系统 。
原文链接:
产生死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用 。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放 。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺 。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系 。
避免方法:
端口占用:lsof -i:端口号或者 nestat
cpu、内存占用:top

推荐阅读