Linux 网络相关内核优化

企业级Linux系统内核优化案例 Linux系统内核是操作系统的核心,它负责管理系统的各种资源,如进程、文件系统、网络等。内核优化可以通过调整内核参数,优化系统性能和稳定性。Linux系统内核优化可以提高系统性能和稳定性,尤其在企业级应用中更为重要。Linux系统内核优化可以在各种企业级应用场景中使用。 阅读详情

Linux 内核优化

标签:  linux 内核 优化 | 发表时间:2014-11-15 08:46 | 作者:stp5555
分享到:
出处:http://blog.youkuaiyun.com

声明:本文档来自互联网整理部份加自已实验部份所得:

TCP 相关部份

 

常用名词说明:

retries(再试)、

 

TCP 服务器 <---> 客户端通信状态

    SYN---------------->

        <--------------SYN,ACK

          ACK--------------->                                          建立连接

 

         Data1---------------->

                   <---------------Data1,ACK

         Data2---------------->

                   <---------------未回复

         Data2---------------->重传 [ 序列参数 tcp_sack, tcp_fack  ]

         [ 重传次数参数: tcp_retries1,tcp_retries2, tcp_orphan_retries ]

                                                       

         数据传输

 

          FIN------------------>

                   <-----------------FIN,ACK(有时候FIN,ACK分两次)

          ACK----------------->                                         断开连接.主动关闭

 

          FIN------------------>

             <-----------------CLOSE_WAIT

        

 

SYN表示建立连接,             RTT(Round-Trip Time): 往返时延

FIN表示关闭连接,              RTO(Retransmission TimeOut)即重传超时时间

ACK表示响应,

PSH表示有 DATA数据传输,

RST表示连接重置

 

TCP 抓包常见错误

tcp out-of-order(tcp有问题)                   #多数是网络拥塞引起的

tcp segment of a reassembled PDU                 #TCP 分片标识

Tcp previous segment lost(tcp先前的分片丢失)

Tcp acked lost segment(tcp应答丢失)

Tcp window update(tcp窗口更新)

Tcp dup ack(tcp重复应答)

Tcp keep alive(tcp保持活动)

Tcp retransmission(tcp 重传)

  


内核参数解释

net.ipv4.tcp_timestamps = 1

说明:

该参数控制RFC 1323 时间戳与窗口缩放选项。默认情况下,启用时间戳与

窗口缩放,但是可以使用标志位进行控制。0位控制窗口缩放,1 位控制时间戳。

值为0(禁用 RFC 1323选项)

值为1(仅启用窗口缩放)

值为2(仅启用时间戳)

值为3(两个选项均启用)

net.ipv4.tcp_timestamps=0

说明:

时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉。

值为0(禁用时间戳)

值为1(启用时间戳)

只有客户端和服务端都开启时间戳的情况下,才会出现能ping通不能建立tcp三次握手的情况,所以做为提供服务的公司,不可能保证所有的用户都关闭时间戳,这个功能,所以我们必须关闭时间戳,这样才能给所用用户提供正常的服务。

 

net.ipv4.tcp_window_scaling = 1

 

net.ipv4.tcp_sack = 1

使用 Selective ACK﹐它可以用来查找特定的遗失的数据报— 因此有助于快速恢复状态。该文件表示是否启用有选择的应答(Selective Acknowledgment),这可以通过有选择地应答乱序接收到的报文来提高性能(这样可以让发送者只发送丢失的报文段)。(对于广域网通信来说这个选项应该启用,但是这会增加对 CPU 的占用。)

 

net.ipv4.tcp_fack = 1

打开FACK(Forward ACK) 拥塞避免和 快速重传功能。(注意,当tcp_sack设置为0的时候,这个值即使设置为1也无效)

 

net.ipv4.tcp_retrans_collapse = 1

 

net.ipv4.tcp_syn_retries = 5

对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。不应该大于255,默认值是5,对应于180秒左右时间。(对于大负载而物理通信良好的网络而言,这个值偏高,可修改为2.这个值仅仅是针对对外的连接, 对进来的连接,是由tcp_retries1 决定的)

 

net.ipv4.tcp_synack_retries = 5

tcp_synack_retries显示或设定 Linux 核心在回应 SYN 要求时会尝试多少次重新发送初始 SYN,ACK 封包后才决定放弃。这是所谓的三段交握 (threeway handshake) 的第二个步骤。即是说系统会尝试多少次去建立由远端启始的 TCP 连线。tcp_synack_retries 的值必须为正整数,并不能超过 255。因为每一次重新发送封包都会耗费约 30 至 40 秒去等待才决定尝试下一次重新发送或决定放弃。tcp_synack_retries 的缺省值为 5,即每一个连线要在约 180 秒 (3 分钟) 后才确定逾时.

 

net.ipv4.tcp_max_orphans = 131072

系统所能处理不属于任何进程的TCP sockets最大数量。假如超过这个数量,那么不属于任何进程的连接会被立即reset,并同时显示警告信息。之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS 攻击﹐千万不要依赖这个或是人为的降低这个限制,更应该增加这个值(如果增加了内存之后)。每个孤儿套接字最多能够吃掉你64K不可交换的内存。

 

net.ipv4.tcp_max_tw_buckets = 5000

表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000。设为较小数值此项参数可以控制TIME_WAIT套接字的最大数量,避免服务器被大量的TIME_WAIT套接字拖死。

 

net.ipv4.tcp_keepalive_time = 7200

net.ipv4.tcp_keepalive_probes = 9

net.ipv4.tcp_keepalive_intvl = 75 
用实例进行说明上述三个参数:

如果某个TCP连接在idle 2个小时后,内核才发起probe(探查).如果probe 9次(每次75秒既tcp_keepalive_intvl值)不成功,内核才彻底放弃,认为该连接已失效。

 

net.ipv4.tcp_retries1 = 3

放弃回应一个TCP 连接请求前﹐需要进行多少次重试。RFC 规定最低的数值是3﹐这也是默认值﹐根据RTO的值大约在3秒 - 8分钟之间。(注意:这个值同时还决定进入的syn连接)

(第二种解释:它表示的是TCP传输失败时不检测路由表的最大的重试次数,当超过了这个值,我们就需要检测路由表了)

 

net.ipv4.tcp_retries2 = 15

在丢弃激活(已建立通讯状况)的TCP连接之前﹐需要进行多少次重试。默认值为15,根据RTO的值来决定,相当于13-30分钟(RFC1122规定,必须大于100秒).(这个值根据目前的网络设置,可以适当地改小,我的网络内修改为了5)

(第二种解释:表示重试最大次数,只不过这个值一般要比上面的值大。和上面那个不同的是,当重试次数超过这个值,我们就必须放弃重试了)

 

net.ipv4.tcp_orphan_retries

主要是针对孤立的socket(也就是已经从进程上下文中删除了,可是还有一些清理工作没有完成).对于这种socket,我们重试的最大的次数就是它

 

net.ipv4.tcp_fin_timeout = 30

表示如果套接字由本端要求关闭,这个参数决定了它保持在 FIN-WAIT-2状态的时间

 

net.ipv4.tcp_tw_recycle = 1

表示开启TCP连接中TIME-WAITsockets的快速回收,默认为0,表示关闭

 

net.ipv4.tcp_stdurg = 0

net.ipv4.tcp_rfc1337 = 0

 

net.ipv4.tcp_max_syn_backlog = 8192

表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。

(第二种解释:端口最大backlog 内核限制。此参数限制服务端应用程序 可以设置的端口最大backlog 值 (对应于端口的 syn_backlog 和 backlog 队列长度)。动机是在内存有限的服务器上限制/避免应用程序配置超大 backlog 值而耗尽内核内存。如果应用程序设置 backlog 大于此值,操作系统将自动将之限制到此值。)

 

net.ipv4.tcp_abort_on_overflow = 0

       当 tcp 建立连接的 3 路握手完成后,将连接置入ESTABLISHED 状态并交付给应用程序的 backlog 队列时,会检查 backlog 队列是否已满。若已满,通常行为是将连接还原至 SYN_ACK状态,以造成 3 路握手最后的 ACK 包意外丢失假象 —— 这样在客户端等待超时后可重发 ACK —— 以再次尝试进入ESTABLISHED 状态 —— 作为一种修复/重试机制。如果启用tcp_abort_on_overflow 则在检查到 backlog 队列已满时,直接发 RST 包给客户端终止此连接 —— 此时客户端程序会收到 104Connection reset by peer 错误。

警告:启用此选项可能导致高峰期用户访问体验到 104:Connection reset by peer 或白屏错误(视浏览器而定)。在考虑启用此选项前应先设法优化提高服务端应用程序的性能,使之能更快接管、处理连接。

 

net.ipv4.tcp_syncookies = 1

         在 tcp 建立连接的 3 路握手过程中,当服务端收到最初的 SYN 请求时,会检查应用程序的 syn_backlog 队列是否已满。若已满,通常行为是丢弃此 SYN 包。若未满,会再检查应用程序的 backlog 队列是否已满。若已满并且系统根据历史记录判断该应用程序不会较快消耗连接时,则丢弃此 SYN 包。如果启用 tcp_syncookies 则在检查到 syn_backlog 队列已满时,不丢弃该 SYN 包,而改用 syncookie 技术进行 3 路握手。

 

警告:使用 syncookie 进行握手时,因为该技术挪用了 tcp_options 字段空间,会强制关闭 tcp 高级流控技术而退化成原始 tcp 模式。此模式会导致封包 丢失时 对端 要等待 MSL 时间来发现丢包事件并重试,以及关闭连接时 TIME_WAIT 状态保持 2MSL 时间。 该技术应该仅用于保护syn_flood 攻击。如果在正常服务器环境中服务器负载较重导致 syn_backlog 和 backlog 队列满时,应优化服务端应用程序的负载能力,加大应用程序 backlog 值。不过,所幸该参数是自动值,仅在 syn_backlog 队列满时才会触发 (在队列恢复可用时此行为关闭)。

Ø  服务端应用程序设置端口backlog 值,内核理论上将允许该端口最大同时接收 2*backlog 个并发连接”请求”(不含已被应用程序接管的连接) ——分别存放在 syn_backlog 和 backlog 队列—— 每个队列的长度为backlog 值。syn_backlog 队列存储 SYN_ACK 状态的连接,backlog 则存储 ESTABLISHED 状态但尚未被应用程序接管的连接。

Ø  syn_backlog 队列实际上是个 hash 表,并且 hash 表大小为 2 的次方。所以实际 syn_backlog 的队列长度要略大于应用程序设置的 backlog 值—— 取对应 2 的次方值。

Ø  当 backlog 值较小,而高峰期并发连接请求超高时,tcp 建立连接的三路握手 网络时延将成为瓶颈 —— 并发连接超高时,syn_backlog 队列将被充满而导致 ` can’t connect` 错误。此时,再提高服务端应用程序的吞吐能力已不起作用,因为连接尚未建立,服务端应用程序并不能接管和处理这些连接—— 而是需要加大backlog 值 (syn_backlog 队列长度) 来缓解此问题。

Ø  启用 syncookie 虽然也可以解决超高并发时的` can’t connect` 问题,但会导致 TIME_WAIT 状态 fallback 为保持 2MSL 时间,高峰期时会导致客户端无可复用连接而无法连接服务器 (tcp 连接复用是基于 <src_ip, src_port, dst_ip, dst_port> 四元组值必须不相同,就访问同一个目标服务器而言,<src_ip, dst_ip, dst_port> 三元组值不变,所以此时可用的连接数限制为仅src_port 所允许数目,这里处于 TIME_WAIT 状态的相同 src_port 连接不可复用。Linux 系统甚至更严格,只使用了 <src_ip, src_port, dst_ip> 三元组…)。故不建议依赖syncookie。

 

 

net.ipv4.tcp_orphan_retries = 0

本端试图关闭TCP连接之前重试多少次。缺省值是7,相当于50秒~16分钟(取决于RTO)。如果你的机器是一个重载的WEB服务器,你应该考虑减低这个值,因为这样的套接字会消耗很多重要的资源。参见tcp_max_orphans

 

net.ipv4.tcp_sack = 1

          SACK(SelectiveAcknowledgment,选择性确认)技术,使TCP只重新发送交互过程中丢失的包,不用发送后续所有的包,而且提供相应机制使接收方能告诉发送方哪些数据丢失,哪些数据重发了,哪些数据已经提前收到了。如此大大提高了客户端与服务器端数据交互的效率。

 

net.ipv4.tcp_reordering = 3

net.ipv4.tcp_ecn = 2

 

net.ipv4.tcp_dsack = 1

允许TCP发送”两个完全相同”的SACK。

 

net.ipv4.tcp_mem = 178368  237824     356736

同样有3个值,意思是: 
net.ipv4.tcp_mem[0]: 低于此值,TCP没有内存压力. 
net.ipv4.tcp_mem[1]: 在此值下,进入内存压力阶段. 
net.ipv4.tcp_mem[2]: 高于此值,TCP拒绝分配socket.

 

net.ipv4.tcp_wmem = 4096   16384       4194304

TCP写buffer,可参考的优化值: 8192436600 873200

 

net.ipv4.tcp_rmem = 4096     87380       4194304

TCP读buffer,可参考的优化值:32768  436600  873200

 

net.ipv4.tcp_app_win = 31

net.ipv4.tcp_adv_win_scale = 2

 

net.ipv4.tcp_tw_reuse = 1

表示开启重用。允许将TIME-WAITsockets重新用于新的TCP连接,默认为0,表示关闭;

 

net.ipv4.tcp_frto = 2

         开启F-RTO,一个针对TCP重传超时(RTOs)的增强的恢复算法。在无线环境下特别有益处,因为在这种环境下分组丢失典型地是因为随机无线电干扰而不是中间路由器组塞。参考RFC 4318了解更多的细节。

这个文件拥有下列值之一:

Ø  0 禁用。

Ø  1 开启基本版本的F-RTO算法。

Ø  2 如果流使用SACK的话,开启SACK-增强的F-TRO算法。不过当使用SACK时是基本版本也是可以使用的,因为有这种场景存在,F-RTO和开启SACK的TCP流分组计数合作不好。

 

net.ipv4.tcp_frto_response = 0

         当F-RTO侦测到TCP超时是伪的时(例如,通过设置了更长的超时值避免了超时),TCP有几个选项决定接下来如何去做。可能的值是:

Ø  1 基于速率减半;平滑保守的响应,导致一个RTT之后拥塞窗口(cwnd)和慢启动阀值(ssthresh)减半。

Ø  2非常保守的响应;不推荐这样做,因为即时有效,它和TCP的其他部分交互不好;立即减半拥塞窗口(cwnd)和慢启动阀值(ssthresh)。

Ø  3侵占性的响应;废弃现在已知不必要的拥塞控制措施(或略一个将引起TCP更加谨慎保守的丢失的重传);cwnd and ssthresh恢复到超时之前的值。

 

net.ipv4.tcp_slow_start_after_idle = 1

         表示拥塞窗口在经过一段空闲时间后仍然有效而不必重新初始化。

 

net.ipv4.tcp_low_latency = 0

         允许 TCP/IP 协议栈适应在高吞吐量情况下低延时的情况;这个选项应该禁用。

 

net.ipv4.tcp_no_metrics_save = 0

一个tcp连接关闭后,把这个连接曾经有的参数比如慢启动门限snd_sthresh,拥塞窗口snd_cwnd 还有srtt等信息保存到dst_entry中, 只要dst_entry 没有失效,下次新建立相同连接的时候就可以使用保存的参数来初始化这个连接.tcp_no_metrics_save 设置为1就是不保持这些参数(经验值),每次建立连接后都重新摸索一次. 我觉得没什么好处. 所以系统默认把它设为0。

 

net.ipv4.tcp_moderate_rcvbuf = 1

         打开了TCP内存自动调整功能(1为打开、0为禁止)

 

net.ipv4.tcp_tso_win_divisor = 3

         单个TSO段可消耗拥塞窗口的比例,默认值为3。

 

net.ipv4.tcp_congestion_control = cubic

net.ipv4.tcp_available_congestion_control = cubic reno

net.ipv4.tcp_allowed_congestion_control = cubic reno

丢包使得TCP传输速度大幅下降的主要原因是丢包重传机制,控制这一机制的就是TCP拥塞控制算法。   congestion(拥塞)

Linux内核中提供了若干套TCP拥塞控制算法,已加载进内核的可以通过内核参数net.ipv4.tcp_available_congestion_control看到:

没有加载进内核的一般是编译成了模块,可以用modprobe加载,这些算法各自适用于不同的环境。

Ø  reno是最基本的拥塞控制算法,也是TCP协议的实验原型。

Ø  bic适用于rtt较高但丢包极为罕见的情况,比如北美和欧洲之间的线路,这是2.6.8到2.6.18之间的Linux内核的默认算法。

Ø  cubic是修改版的bic,适用环境比bic广泛一点,它是2.6.19之后的linux内核的默认算法。

Ø  hybla适用于高延时、高丢包率的网络,比如卫星链路。

载入tcp_hybl模块 modprobe tcp_hybla

TCP拥塞控制         算法对TCP传输速率的影响可很大。

 

net.ipv4.tcp_abc = 0

net.ipv4.tcp_mtu_probing = 0

 

net.ipv4.tcp_fastopen

         GoogleTFO特性,kernel 3.6以上版本支持,具体实现方法参考本文档 Google TFO特性。

 

net.ipv4.tcp_base_mss= 512

分组层路径MTU发现(MTU探测)中使用的search_low的初始值。如果允许MTU探测,这个初始值就是连接使用的初始MSS值。

 

net.ipv4.route.min_adv_mss= 256

该文件表示最小的MSS(MaximumSegment Size)大小,取决于第一跳的路由器MTU。

 

net.ipv4.tcp_workaround_signed_windows = 0

 

net.ipv4.tcp_dma_copybreak= 4096

         下限.以字节为单位.socket 的大小将卸载到一个 dma 复制引擎.如果存在一个在系统和内核配置为使用 config_net_dma 选项。

 

net.ipv4.tcp_max_ssthresh= 0

慢启动阶段,就是当前拥塞窗口值比慢启动阈值(snd_ssthresh)小的时候,所处的阶段就叫做慢启动阶段。

当我们收到一个新的ACK时,则会调用tcp_slow_start()这个函数,并且为拥塞窗口增加1.(Linux中拥塞窗口的值代表数据包的个数,而不是实际的发送

字节数目。实际可以发送的字节数等于可以发送的数据包个数*MSS。)

直到慢启动阶段出现数据包的丢失。

而引入了tcp_max_ssthresh 这个参数后,则可以控制在慢启动阶段拥塞窗口增加的频度。

默认这个参数不打开,如果这个参数的值设置为1000,则当拥塞窗口值大于1000时,

则没收到一个ACK,并不再增加拥塞窗口一个单位了,而是约收到2个ACK才增加一个窗口单位。收到2ACK并不是决定值!!

需要根据当前的拥塞窗口值,tcp_max_ssthresh值进行判断。

 

net.ipv4.tcp_thin_linear_timeouts= 0

这个函数RTO超时的处理函数。如果是thin流,则不要新设RTO是原先的2倍。

 

net.ipv4.tcp_thin_dupack= 0

         与tcp_thin_linear_timeouts同为快速重传算法参数

 

net.core.netdev_max_backlog=300

进入包的最大设备队列.默认是300,对重负载服务器而言,该值太低,可调整到1000。

 

ip link set eth0mtu 1500

         设置网卡mtu大小。

 

IP 相关部份

 

net.ipv4.ip_local_port_range = 1024 65000

表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。

 

net.ipv4.ip_conntrack_max = 655360

在内核内存中netfilter可以同时处理的“任务”(连接跟踪条目)another

 

# 避免放大攻击

net.ipv4.icmp_echo_ignore_broadcasts = 1

 

# 开启恶意icmp错误消息保护

net.ipv4.icmp_ignore_bogus_error_responses = 1

 

# 开启SYN洪水攻击保护

net.ipv4.tcp_syncookies = 1

 

# 开启并记录欺骗,源路由和重定向包

net.ipv4.conf.all.log_martians = 1

net.ipv4.conf.default.log_martians = 1

 

# 处理无源路由的包

net.ipv4.conf.all.accept_source_route = 0

net.ipv4.conf.default.accept_source_route = 0

 

# 开启反向路径过滤

net.ipv4.conf.all.rp_filter = 1

net.ipv4.conf.default.rp_filter = 1

 

# 确保无人能修改路由表

net.ipv4.conf.all.accept_redirects = 0

net.ipv4.conf.default.accept_redirects = 0

net.ipv4.conf.all.secure_redirects = 0

net.ipv4.conf.default.secure_redirects = 0

 

# 不充当路由器

net.ipv4.ip_forward = 0

net.ipv4.conf.all.send_redirects = 0

net.ipv4.conf.default.send_redirects = 0

 

# 开启execshild

kernel.exec-shield = 1

kernel.randomize_va_space = 1

 

 

 

网络相关部份(/sys)

 

sys/class/net/eth0/statistics.rx_packets:

收到的数据包数据

sys/class/net/eth0/statistics.tx_packets:

传输的数据包数量

sys/class/net/eth0/statistics.rx_bytes:

接收的字节数

sys/class/net/eth0/statistics.tx_bytes:

传输的字节数

sys/class/net/eth0/statistics.rx_dropped:

收包时丢弃的数据包

sys/class/net/eth0/statistics.tx_dropped:

发包时丢弃的数据包


(详细总结)python爬取 163收件箱邮件内容,收件箱列表的几种方法(urllib, requests, selenium) 需求:最近有一个需求,需要将163邮箱收件箱里面的所有邮件的内容全部copy下来,整理到一个word里面,不多也就28页的邮件(不要问我为什么有这需求,不告诉你),自己手动去ctrl+ cv 的话,估计要搞吐。然后就想能不能用python的爬虫来实现,虽然过程比较苦(后期改bug改的要吐了)。但是会后还是将需求实现了。这基本也算是入门了 urllib、requests、selenium这几个py... 阅读详情

相关推荐

JQ8900语音播报模块在RT-Thread系统下的驱动移植与测试详解

本文详细讲解了如何在RT-Thread嵌入式操作系统中,为JQ8900语音播报模块进行驱动移植与功能测试。内容涵盖从获取驱动代码、配置Kconfig工程、编译烧录到核心代码解析的完整流程,并提供了基于串口通信的上电测试与问题排查方法,帮助开发者快速掌握在RT-Thread系统下集成外部模块的核心技能。

weixin_35677363的博客 593

tcp常见问题

目录: 1……tcp out-of-order(tcp有问题) 2……tcp segment of a reassembled PDU 3……Tcp previous segment lost(tcp先前的分片丢失) 4……Tcp acked lost segment(tcp应答丢失) 5……Tcp window update(tcp窗口更新) 6……Tcp d

zoutian007的专栏 6994

【硬件开源实战】STM32G070RBT6开发板从设计到避坑全解析

本文全面解析了STM32G070RBT6开发板从硬件设计到避坑的实战经验。详细介绍了电源设计、时钟电路、PCB布局等关键环节,分享了成本控制、焊接测试、软件开发和外设驱动的实用技巧,帮助开发者高效完成项目开发。

weixin_26897585的博客 237

Linux 内核优化

声明:本文档来自互联网整理部份加自已实验部份所得: TCP 相关部份   常用名词说明: retries(再试)、   TCP 服务器 客户端通信状态     SYN---------------->                   ACK--------------->                                          建立连接

运维小站 3140

STM32 移植LwIP 实现网线插拔自动恢复

STM32 移植LwIP 之后,能正常联网通讯,但是发现2个问题, 1、上电初始化前,未插入网线,之后就无法获取到IP地址(DHCP) 2、正常通讯过程中,拔掉网线,然后插回去,不知道如何复位 先看一下LWIP初始化代码 /** * LwIP initialization function */ int MX_LWIP_Init() { /* Initilialize the LwIP stack with RTOS */ tcpip_init( NULL, NULL );

tiantangmoke的博客 8074

soul聊天协议逆向

通过观察上面的CFG发现,该混淆符合以下逻辑,整体思路就是先查找主分发器,一般被引用次数最多的那个块就是主分发器,引用主分发器的块大概率是真实块,再使用unicorn模拟执行,遍历每一个分支,记录每一个块,如果某一个块是上次记录的块则也为真实块,无后继的块则为retn块,剩下的就是无用块。通过Frida Hook libc.so后发现,聊天协议走的是JAVA层的socket,然后Hook JAVA层相关函数得到如下调用堆栈。里面调用的函数不是很多,所以。不行不行,革命要彻底!

2503_90751789的博客 3211

三次握手和四次挥手

如客户端发出连接请求,但因连接请求报文丢失而未收到确认,于是客户端再重传一次连接请求。后来收到了确认,建立了连接。数据传输完毕后,就释放了连接,客户端共发出了两个连接请求报文段,其中第一个丢失,第二个到达了服务端,但是第一个丢失的报文段只是在某些网络结点长时间滞留了,延误到连接释放以后的某个时间才到达服务端,此时服务端误认为客户端又发出一次新的连接请求,于是就向客户端发出确认报文段,同意建立连接,不采用三次握手,只要服务端发出确认,就建立新的连接了,此时客户端忽略服务端发来的确认,也不发送数据,则服务端一致

weixin_42396189的博客 289

基于深度学习 YOLOv11 的快递包裹检测系统(Python + PySide6 界面 + 训练代码)

成为亟需优化的重要环节。随着电子商务的快速发展,物流行业面临着越来越大的压力,为了解决这些问题,我们提出了一种。目标检测算法,实现快递包裹的。的界面,供用户进行实时监控。本项目的主要目标是利用。

斌擎科技 763

9_TCP问题集

1. TCP问题集 1.1. 服务端关闭后,客户端继续发送数据 服务端返回Reset。详见 …/test/serverClose.cap 1.2. 连接一个不存在的IP和端口 1.3. 连接一个存在的IP,但是端口没有监听 1.4. 单机最多建立多少tcp连接 1.5. 使用tcp实现Demo 详见 TCP-IP/test/SimpleNetwork 1.6. 实现服务端主动发起连接的例子 1.7. 实现同时关闭的例子(含方法) 是否可以通过拔网线来模拟? 1.8. socket.listen(__back

knowledgebao的博客 443

【温室气体数据集】全球总碳柱观测网络 TCCON

【温室气体数据集】全球总碳柱观测网络 TCCON

WW、forever的博客 437

Vibe Coding 实战指南:用 3 类社区资源实现每周高效追新

介绍一种分层技术雷达校准方法,通过领域过滤器(L1技术栈锚定、L2能力映射、L3场景收敛)精准筛选AI编程相关更新,结合可验证的Shell命令与CI任务卡,将信息过载压缩为可执行、可审计的工程实践。

weixin_27251469的博客 330

Linux网络相关内核参数优化--redis出现cannot assign requested address

在高并发情况下,redis链接出现大面积的 cannot assign requested address 错误。 分析其原因,查看当前系统状态。 netstat -nat | grep 6379 2. 目前大量的redis链接端口处于 TIME_WAIT 状态,linux没来得及回收,导致出现cannot assign requested address,无端口可用。查阅相关资料,阿里...

qq_39027055的博客 2631

如何给数据添加高斯白噪声?

首先测试集应该是加噪声的,至于训练集需不需要加噪声就见仁见智了。我个人测试的结果是,训练集如果不加噪声的话效果特别差,如果加噪声的话效果就比较好接受,大家可以自己试试看。在轴承故障研究中免不了要涉及到给数据主动加入噪声的情况,一般我们加的是高斯白噪声。由于热噪声是由大量自由电子的运动产生的,其统计特性服从高斯分布,故常将热噪声称为高斯白噪声。的频谱是均匀分布的,好像白光的频谱在可见光的频谱范围内均匀分布那样,所以热噪声又常称为。定义一:如果一个噪声,它的瞬时值服从。又是均匀分布的,则称它为高斯白噪声。

weixin_50642818的博客 5220

5. linux 系统内核优化方法

linux 系统 内核 优化

二立的博客 425

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

linux内核参数注释与优化

目录 1、linux内核参数注释 2、两种修改内核参数方法 3、内核优化参数生产配置 参数解释由网络上收集整理,常用优化参数对比了网上多个实际应用进行表格化整理,使查看更直观。 学习linux也有不少时间了,每次优化linux内核参数时,都是在网上拷贝而使用,甚至别人没有列出来的参数就不管了,难道我就不需要了吗? 参考文章: linux内核TCP相关参数解释 http://os.chinaunix...

seaship的博客 1796

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Linux系统内核参数及网络优化(服务器生产可用),持续更新~~~

文章目录软件部分SSH服务优化最大文件描述符内核及网络优化 软件部分 如果是centos7/8系统可以安装这几个软件 yum install yum-fastestmirror epel-release vim screen git wget curl axel yum-axelget yum-utils -y SSH服务优化 修改配置文件/etc/ssh/sshd_config #禁止空密码登录 PermitEmptyPasswords no #不使用DNS解析,可以加快访问速度 UseDNS no

AZ的个人技术博客 253

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【Linux驱动开发100问】什么是Linux内核?

Linux驱动开发100问之什么是Linux内核?

让技术没有门槛 4585

Linux 网络相关内核参数详解与调优

在 Linux 系统中,网络性能调优是提升服务质量的关键环节。通过调整内核网络参数,可以优化网络吞吐量、降低延迟、提高连接处理能力。通过合理调整这些网络参数,可以显著提升 Linux 系统在不同场景下的网络性能。建议结合具体业务需求,逐步调整并验证效果,避免盲目修改参数导致系统不稳定。

sre救赎之路 758

书单推荐:网络原理和 Linux 内核实现

欢迎来到 Linux 性能优化专栏的加餐时间。上一期的专栏加餐,我给你推荐了一些 Linux 入门、体系结构、内核原理再到性能优化的书籍。这里再简单强调一下,主要包括下面这几本。Linux基础入门书籍:《鸟哥的Linux私房菜》计算机体系结构书籍:《深入理解计算机系统》Linux编程书籍:《Linux程序设计》和《UNIX环境高级编程》Linux内核书籍:《深入Linux内核架构》性能优化书籍:《性能之巅:洞悉系统、企业与云计算》

echohuangshihuxue的博客 746

【网络】Linux 内核优化实战 - net.core.netdev_max_backlog

net.core.netdev_max_backlog 是 Linux 内核的关键网络参数,用于控制系统在网络设备接收数据包速率超过内核处理能力时,允许在网络设备队列中暂存的最大数据包数量。当队列满时,新到达的数据包将被丢弃,可能导致网络丢包和性能下降。

cuiwin的专栏 1850

【经验分享】Linux 系统安装后内核参数优化

在 Linux 系统安装后,进行内核优化有助于提升系统的性能、稳定性和安全性。以下是一些常见的内核优化操作:修改/etc/sysctl.conf 文件执行sysctl -p使配置生效。以下是对这些。

SunMy的博客 1611

linux 内核优化信息

目录1、linux内核参数注释2、两种修改内核参数方法3、内核优化参数生产配置参数解释由网络上收集整理,常用优化参数对比了网上多个实际应用进行表格化整理,使查看更直观。学习linux也有不少时间了,每次优化linux内核参数时,都是在网上拷贝而使用,甚至别人没有列出来的参数就不管了,难道我就不需要了吗?参考文章:linux内核TCP相关参数解释http://os.chinau...

weixin_33753845的博客 84

linux内核优化

以下表格中红色字体为常用优化参数 根据参数文件所处目录不同而进行分表整理 下列文件所在目录:/proc/sys/net/ipv4/ 名称 默认值 建议值 描述 tcp_syn_retries 5 1 对于一个新建连接,内核要发送多少个SYN连接请求才决定放弃。不应该大于255,默认值是5,对应于180秒左右时间。。(对于大负载而物理通信良好

CDLLei的博客 237

Nginx服务器Linux内核的优化(摘抄)

默认的Linux内核参数考虑的是最通用场景,不符合用于支持高并发访问的Web服务器的定义,根据业务特点来进行调整,当Nginx作为静态web内容服务器、反向代理或者提供压缩服务器的服务器时,内核参数的调整都是不同的,此处针对最通用的、使Nginx支持更多并发请求的TCP网络参数做简单的配置,修改/etc/sysctl.conf来更改内核参数 net.ipv4.ip_nonlocal_bind = ...

q309572960的博客 302
上一篇: QUEUEING IN THE LINUX NETWORK STACK
下一篇: 优化Linux下的内核TCP参数来提高服务器负载能力
BlueSy2008
博客等级 码龄20年 26粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值