从linux源码看epoll 前言 在linux的高性能网络编程中,绕不开的就是epoll。...本文就是笔者在探究epoll源码过程中,对kernel将就绪描述符添加到epoll并唤醒对应进程的一次源码分析(基于linux-2.6.32内核版本)。...由于linux的系统调用是通过(SYSCALL_DEFINE1,SYSCALL_DEFINE2......SYSCALL_DEFINE6)定义的,那么sys_epoll_create1对应的源码即是SYSCALL_DEFINE...(注:由于是tcp socket,所以这边sock->ops=inet_stream_ops,这个初始化的过程在我的另一篇博客>中,博客地址如下: https...总结 epoll作为linux下非常优秀的事件触发机制得到了广泛的运用。其源码还是比较复杂的,本文只是阐述了epoll读写事件的触发机制,探究linux kernel源码的过程非常快乐^_^。
前言 在linux的高性能网络编程中,绕不开的就是epoll。和select、poll等系统调用相比,epoll在需要监视大量文件描述符并且其中只有少数活跃的时候,表现出无可比拟的优势。...本文就是笔者在探究epoll源码过程中,对kernel将就绪描述符添加到epoll并唤醒对应进程的一次源码分析(基于linux-2.6.32内核版本)。...由于linux的系统调用是通过(SYSCALL_DEFINE1,SYSCALL_DEFINE2......SYSCALL_DEFINE6)定义的,那么sys_epoll_create1对应的源码即是SYSCALL_DEFINE...>中,博客地址如下: https://my.oschina.net/alchemystar/blog/1791017) 既然知道了tfile->f_op...总结 epoll作为linux下非常优秀的事件触发机制得到了广泛的运用。其源码还是比较复杂的,本文只是阐述了epoll读写事件的触发机制,探究linux kernel源码的过程非常快乐_。
Linux下如何查看版本信息, 包括位数、版本信息以及CPU内核信息、CPU具体型号等等,整个CPU信息一目了然。 ...1、# uname -a (Linux查看版本当前操作系统内核信息) Linux localhost.localdomain 2.4.20-8 #1 Thu Mar 13 17:54:28 EST...2003 i686 athlon i386 GNU/Linux 2、# cat /proc/version (Linux查看当前操作系统版本信息) Linux version 2.4.20...Thu Mar 13 17:54:28 EST 2003 3、# cat /etc/issue 或cat /etc/redhat-release(Linux查看版本当前操作系统发行版信息) ...Red Hat Linux release 9 (Shrike) 4、# cat /proc/cpuinfo (Linux查看cpu相关信息,包括型号、主频、内核信息等) processor
从linux源码看socket的close 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。...上篇博客讲了socket的阻塞和非阻塞,这篇就开始谈一谈socket的close(以tcp为例且基于linux-2.6.24内核版本) TCP关闭状态转移图: 众所周知,TCP的close过程是四次挥手...接着在FIN_WAIT2状态等待对端的FIN,完成后面两次挥手: ?...总结 linux内核源代码博大精深,阅读其代码很费周折。之前读>的时候由于有先辈引导和梳理,所以看书中所使用的BSD源码并不觉得十分费劲。...直到现在自己带着问题独立看linux源码的时候,尽管有之前的基础,仍旧被其中的各种细节所迷惑。希望笔者这篇文章能帮助到阅读linux网络协议栈代码的人。
目录 1.前言 2.Unsafe中的native方法 3.Unsafe中的上层方法 =======正文分割线====== 一、前言 在JDK8中追踪可见sun.misc.Unsafe这个类是无法看见源码的...,打开openjdk8源码看 目录:openjdk-8-src-b132-03_mar_2014\openjdk\jdk\src\share\classes\sun\misc 此类包含了低级(native...native void park(boolean isAbsolute, long time); //终止挂起的线程,恢复正常.java.util.concurrent包中挂起操作都是在LockSupport...类实现的,也正是使用这两个方法 public native void unpark(Object thread); //获取系统在不同时间系统的负载情况 public...; if ((result = (*addr == old))) *addr = new_val; return result; } ====参考======== 1.openjdk8源码
今天笔者就来从Linux源码的角度看下Server端的Socket在进行bind的时候到底做了哪些事情(基于Linux 3.10内核)。...(Netty版本 >= 4.0.16且Linux内核版本>=3.9以上)中,可以使用SO_REUSEPORT。...SO_REUSEADDR 在之前的源码里面,我们看到判断bind是否冲突的时候,有这么一个分支 (!reuse || !...这个特性在紧急重启以及线下调试的非常有用,建议开启。 SO_REUSEPORT SO_REUSEPORT是Linux在3.9版本引入的新功能。...https://www.nginx.com/blog/socket-sharding-nginx-release-1-9-1/ 总结 Linux内核源码博大精深,一个看起来简单的bind系统调用竟然牵涉这么多
从linux源码看socket(tcp)的timeout 前言 网络编程中超时时间是一个重要但又容易被忽略的问题,对其的设置需要仔细斟酌。...kernel代码版本细微变化 值得注意的是,linux本身官方发布的2.6.32源码对于tcp_syn_retries2的解释和RFC并不一致(至少笔者阅读的代码如此,这个细微的变化困扰了笔者好久,笔者下载了和机器对应的内核版本后才发现代码改了...以下为代码对比: ========================>linux 内核版本2.6.32-431<======================== #define TCP_TIMEOUT_INIT...timeout = ((2 << boundary) - 1) * rto_base; ...... } ========================>linux 内核版本2.6.32.630时,将socket设置为非阻塞,然后用select系统调用去模拟超时,而没有走linux本身的超时逻辑,如下图所示: ?
kernel代码版本细微变化 值得注意的是,linux本身官方发布的2.6.32源码对于tcp_syn_retries2的解释和RFC并不一致(至少笔者阅读的代码如此,这个细微的变化困扰了笔者好久,笔者下载了和机器对应的内核版本后才发现代码改了...以下为代码对比: ========================>linux 内核版本2.6.32-431<======================== #define TCP_TIMEOUT_INIT...timeout = ((2 << boundary) - 1) * rto_base; ...... } ========================>linux 内核版本2.6.32.630时,将socket设置为非阻塞,然后用select系统调用去模拟超时,而没有走linux本身的超时逻辑,如下图所示: 由于没有java并没有设置so_sndtimeo的选项,所以在...我们先看下系统调用的源码: read系统调用 socket的read系统调用最终调用的是tcp_recvmsg, 其源码如下: int tcp_recvmsg(struct kiocb *iocb, struct
今天笔者就从Linux源码的角度看下Server端的Socket在进行Accept的时候到底做了哪些事情(基于Linux 3.10内核)。...理解accept的关键点是,它会创建一个新的Socket,这个新的Socket来与对端运行connect()的对等Socket进行连接,如下图所示: 接下来,我们就进入Linux内核源码栈吧 accept...关于epoll的原理可以看下笔者之前的博客《从linux源码看epoll》: https://www.cnblogs.com/alchemystar/p/13161781.html 在这里描述一下原因,...,可以见笔者另一篇博客的详细分析 《从Linux源码看Socket(TCP)的listen及连接队列》: https://www.cnblogs.com/alchemystar/p/13845081.html...总结 Linux内核源码博大精深,每次扎进去探索时候都会废寝忘食,其间可以看到各种优雅的设计,在此分享出来,希望对读者有所帮助。
Linux下查看网卡驱动和版本信息 查看网卡生产厂商和信号 查看基本信息:lspci 查看详细信息:lspci -vvv # 3个小写的v 查看网卡信息:lspci | grep Ethernet
今天笔者就来从Linux源码的角度看下Client端的Socket在进行Connect的时候到底做了哪些事情。由于篇幅原因,关于Server端的Accept源码讲解留给下一篇博客。...int connect(int sockfd,const struct sockaddr *serv_addr,socklen_t addrlen) 这个系统调用有三个参数,那么依据规则,它肯定在内核中的源码长下面这个样子...内核中修改的地方为: cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000 通过hash决定端口号起始搜索范围 在Linux上进行connect...自然也考虑到了这种情况,所以提供了一个tcp_tw_reuse参数使得在搜索端口号时可以在某些情况下重用TIME_WAIT。...端口号迭代搜索 Linux内核在[low,high]范围按照上述逻辑进行port的搜索,如果没有搜索到port,即port耗尽,就会返回-EADDRNOTAVAIL,也即Cannot assign requested
文章目录 一、下载 Linux 内核 1、下载最新版本 Linux 内核 2、下载指定版本 Linux 内核 二、Linux 内核版本号含义 一、下载 Linux 内核 ---- 1、下载最新版本 Linux...6 小版本号 ( 修改次数 ) : 14 在 Linux 内核 官网 https://www.kernel.org/ 页面中 , 点击 https://www.kernel.org/pub/ 链接....x 版本 , 进入 https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ 页面 , 在该界面中可以直接下载 linux-5.6.14.tar.gz...文件 , 这就是 5.6.14 版本 Linux 内核源码 ; 二、Linux 内核版本号含义 ---- 以 5.6.14 版本为例 : 主版本号 : 5 次版本号 : 6 小版本号 (...修改次数 ) : 14 版本稳定性 : 稳定版本 : 次版本号 为 偶数 , 说明该版本的 Linux 内核是可以使用的稳定版本 , 不稳定版本 : 如果次版本号为奇数 , 说明在该版本中
笔者这次就从linux源码的角度来阐述socket阻塞(block)和非阻塞(non_block)的区别。 本文源码均来自采用Linux-2.6.24内核版本。...socket的创建 很明显,内核的第一步应该是通过AF_INET、SOCK_STREAM以及最后一个参数0定位到需要创建一个TCP的socket,如下图绿线所示: 我们跟踪源码调用 socket(...事实上: fcntl的作用就是将O_NONBLOCK标志位存储在sock_fd对应的filp结构的f_lags里,如下图所示。...(进程结构体)->files_struct->fd_array中找到对应的socket的file描述符,再修改file->flags 在调用socket.recv的时候 我们跟踪源码调用: socket.recv...希望笔者这篇文章能帮助到阅读linux网络协议栈代码的人。
Linux,除了使用环境变量的方式。 可以使用alternatives命令。 alternatives --list可以列出...我也不知道,大概是可供切换的软件吧。 ?...alternatives --list 使用alternatives --config java来切换java版本。 如下图: ?
,在容器里重新手动编译patchelf。...=/etc/my.cnf & GreatSQL是基于Percona Server的分支版本,默认情况下需要用到jemalloc这个库,如果启动过程中报告类似下面的错误,只需要再安装jemalloc或者..._64/bin/mysql -uroot -S/data/GreatSQL/mysql.sock shutdown 查看版本号: root@GreatSQL [(none)]> \s ......Shell快速完成,分别参考下面的文档即可: 利用GreatSQL部署MGR集群 InnoDB Cluster+GreatSQL部署MGR集群 ansible一键安装GreatSQL并构建MGR集群 在Docker...部署MGR集群 在Docker中部署GreatSQL并构建MGR集群
今天笔者就来从Linux源码的角度看下Client端的Socket在进行Connect的时候到底做了哪些事情。...int connect(int sockfd,const struct sockaddr *serv_addr,socklen_t addrlen) 这个系统调用有三个参数,那么依据规则,它肯定在内核中的源码长下面这个样子...内核中修改的地方为: cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000 通过hash决定端口号起始搜索范围 在Linux上进行connect...端口号迭代搜索 Linux内核在[low,high]范围按照上述逻辑进行port的搜索,如果没有搜索到port,即port耗尽,就会返回-EADDRNOTAVAIL,也即Cannot assign requested...Client(TCP)端进行Connect的过程真是跋山涉水,从一开始文件描述符的限制到端口号的搜索再到路由表的搜索再到最后的三次握手,任何一个环节有问题就会导致创建连接失败,笔者详细的描述了这些机制的源码实现
今天笔者就来从Linux源码的角度看下Server端的Socket在进行listen的时候到底做了哪些事情(基于Linux 3.10内核),当然由于listen的backlog参数和半连接hash表以及全连接队列都相关...这就会引起一些微妙的现象,这个在本文中会进行讲解。 接下来,我们就进入Linux内核源码栈吧 listen |->INLINE_SYSCALL(listen......)...在Nginx 1.9.1版本开启了之后,其压测性能达到3倍! 半连接队列hash表和全连接队列 在笔者一开始翻阅的资料里面,都提到。...但笔者仔细阅读了一下源码,其实并非如此。事实上,sync_queue其实是个hash表(syn_table)。另一个队列是icsk_accept_queue。...而笔者也正是写这篇博客而详细阅读源码的时候偶然间灵光一闪,找到了最近一个诡异问题的根因。这个诡异问题的分析过程将会在近期写出来分享给大家。
在Linux系统中,可以使用各种工具来检查TLS版本。...TLS 1.2版本。...使用以下命令:curl -v https://example.com1在输出中,你可以看到连接信息,其中包括所使用的TLS版本。Python脚本: 你也可以使用Python脚本来检查TLS版本。...无论使用哪种方法,检查TLS版本是确保系统安全和加密通信的重要步骤。确保系统上使用的TLS版本是最新且安全的,以保护你的数据和隐私。...我们整理了一份Linux学习的pdf文件,放在下面的路径,可以自提:https://www.howtouselinux.com/post/linux-commands-for-linux-beginners-cheat-sheet
从linux源码看socket的阻塞和非阻塞 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。 大部分高性能网络框架采用的是非阻塞模式。...笔者这次就从linux源码的角度来阐述socket阻塞(block)和非阻塞(non_block)的区别。 本文源码均来自采用Linux-2.6.24内核版本。...事实上: fcntl的作用就是将O_NONBLOCK标志位存储在sock_fd对应的filp结构的f_lags里,如下图所示。 ?...(进程结构体)->files_struct->fd_array中找到对应的socket的file描述符,再修改file->flags 在调用socket.recv的时候 我们跟踪源码调用: socket.recv...希望笔者这篇文章能帮助到阅读linux网络协议栈代码的人。
好比作者自己的机器是X86_64架构的,而你的机器是i386,那很不幸运,不适合你,只能下载源码手动安装了。...大概有多少种编译器呢,我们可以在使用yum groupinfo Development tools 进行包组的查看了。...有的读者也许还不懂这个命令的含义,我在写完这个博文后,会单独开设一个博文讲解yum命令和yum 仓库的,其实也很简单,不要畏惧。...2.下载httpd源码包 在网上找到源码的地址,如图所示: 复制链接地址后,进去xshell中在命令行中输入: wget 链接地址,下载下来的源码包就存在你当前的路径下。...下载好源码之后解压出来,在当前目录上使用:ls 查看源码包是用哪种格式的压缩文件压缩的。
领取专属 10元无门槛券
手把手带您无忧上云