简单的epoll例子 下面的例子,是从笔者本人用c语言写的dbproxy中的一段代码。由于细节过多,所以做了一些删减。...那么,由accept获得的client_fd的结构如下图所示: (注:由于是tcp socket,所以这边sock->ops=inet_stream_ops,这个初始化的过程在我的另一篇博客从linux...源码看socket的阻塞和非阻塞>>中,博客地址如下: https://my.oschina.net/alchemystar/blog/1791017) 既然知道了tfile->f_op->poll的实现...,我们就可以看下此poll是如何将安装回调函数的。...ep_poll_callback,用于回调唤醒 // 注意,这边不是init_waitqueue_entry,即没有将当前KSE(current,当前进程/线程)写入到 // wait_queue当中,因为不一定是从当前安装的
从linux源码看epoll 前言 在linux的高性能网络编程中,绕不开的就是epoll。...简单的epoll例子 下面的例子,是从笔者本人用c语言写的dbproxy中的一段代码。由于细节过多,所以做了一些删减。...(注:由于是tcp socket,所以这边sock->ops=inet_stream_ops,这个初始化的过程在我的另一篇博客从linux源码看socket的阻塞和非阻塞>>中,博客地址如下: https...ep_poll_callback,用于回调唤醒 // 注意,这边不是init_waitqueue_entry,即没有将当前KSE(current,当前进程/线程)写入到 // wait_queue当中,因为不一定是从当前安装的...总结 epoll作为linux下非常优秀的事件触发机制得到了广泛的运用。其源码还是比较复杂的,本文只是阐述了epoll读写事件的触发机制,探究linux kernel源码的过程非常快乐^_^。
从linux源码看socket的close 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。...上篇博客讲了socket的阻塞和非阻塞,这篇就开始谈一谈socket的close(以tcp为例且基于linux-2.6.24内核版本) TCP关闭状态转移图: 众所周知,TCP的close过程是四次挥手...但最终解决方案还是得从应用程序着手。...总结 linux内核源代码博大精深,阅读其代码很费周折。之前读>的时候由于有先辈引导和梳理,所以看书中所使用的BSD源码并不觉得十分费劲。...直到现在自己带着问题独立看linux源码的时候,尽管有之前的基础,仍旧被其中的各种细节所迷惑。希望笔者这篇文章能帮助到阅读linux网络协议栈代码的人。
www.oracle.com/technetwork/java/javase/downloads/java-se-6u24-download-338091.html cp /Downloads/jdk-6u24-linux-x64....bin /usr/java cd /usr/java sh /jdk-6u24-linux-x64.bin Set JAVA_HOME / PATH for single.../java export PATH=$PATH:/usr/java/jdk1.6.0_24/bin reference: http://www.cyberciti.biz/faq/linux-unix-set-java_home-path-variable...reference:http://www.jb51.net/os/Ubuntu/1049.html http://www.cyberciti.biz/tips/howto-ubuntu-linux-convert-dhcp-network-configuration-to-static-ip-configuration.html...9f65cb4a8c8507ed4fece7631046893b4c4380147d8c8c4668d4e419ce3b4c413037bfa6663f405a8e906b6075a94f5feef166253c0123b5998bdd0c81ac925f75ce786a6459db0144dc47f497016fd620e11eb2b81897ad813384daa3c4ae5744bd24127af1e7fd5d1764cb7881652697ad&p=8366de5985cc45ff57ec9e0c5552&user=baidu&fm=sc&query=linux
本文大部分讨论的是socket设置为block的情况,即setNonblock(false),仅在最后提及了nonblock socket(本文基于linux 2.6.32-431内核)。...以下为代码对比: ========================>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的选项,所以在...java的SocketInputStream的sockRead0超时时间 java的超时时间由SO_TIMOUT决定,而linux的socket并没有这个选项。
profile # 这个就可以采集堆栈信息用来画火焰图 ---- 其次我们还要知道特定环节占用时间长的原因,对不同资源的观察命令都不一样,这个类工具的量就比较大了。...为了安装的快一点,我这里使用了 `dbm-agent` 提供的命令行工具来安装 MySQL 数据库。...1、安装 # 安装 MySQL-8.0.29 版本 buffer-pool 只配置 128MB dbma-cli-single-instance --port=3306 --max-mem=128 -...看总量 mpstat 1 20 Linux 5.14.0-55.el9.x86_64 (git-sqlpy-com) 07/21/2022 _x86_64_ (2 CPU) 01:16:46...到这里就非常明确是哪里慢了。 ---- 针对性优化 由于我们已经知道是写 redo-log 和 binlog 日志慢了,所以我们可以针对性的做参数优化了。
前言 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。...今天笔者就来从Linux源码的角度看下Server端的Socket在进行bind的时候到底做了哪些事情(基于Linux 3.10内核)。...返回,若成功则为0,若出错则为-1 int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen); 好了,我们直接进入Linux...SO_REUSEPORT SO_REUSEPORT是Linux在3.9版本引入的新功能。...鉴于此,Linux增加了SO_REUSEPORT,而之前bind中判断是否冲突的下面代码也是为这个参数而添加的逻辑: if(!reuseport || !
从linux源码看socket(tcp)的timeout 前言 网络编程中超时时间是一个重要但又容易被忽略的问题,对其的设置需要仔细斟酌。...本文大部分讨论的是socket设置为block的情况,即setNonblock(false),仅在最后提及了nonblock socket(本文基于linux 2.6.32-431内核)。...timeout = ((2 << boundary) - 1) * rto_base; ...... } ========================>linux 内核版本2.6.32.630时,将socket设置为非阻塞,然后用select系统调用去模拟超时,而没有走linux本身的超时逻辑,如下图所示: ?...java的SocketInputStream的sockRead0超时时间 java的超时时间由SO_TIMOUT决定,而linux的socket并没有这个选项。
nginx之前: (1)GCC编译器安装过程 (2)PCRE库安装过程 (3) zlib库 (4) OpenSSL开发库 安装步骤,下面yum直接搞定以上4条 安装依赖 yum -y install...gcc zlib zlib-devel pcre-devel openssl openssl-devel 解压缩 tar -zxvf linux-nginx-1.12.2.tar.gz cd nginx...Linux下MySQL的配置文件是my.cnf,一般会放在/etc/my.cnf,/etc/mysql/my.cnf。...下启动mysql的命令: mysqladmin start /ect/init.d/mysql start (前面为mysql的安装路径) 2.linux下重启mysql的命令: mysqladmin...restart /ect/init.d/mysql restart (前面为mysql的安装路径) 3.linux下关闭mysql的命令: mysqladmin shutdown /ect/init.d
前言 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。...关于epoll的原理可以看下笔者之前的博客《从linux源码看epoll》: https://www.cnblogs.com/alchemystar/p/13161781.html 在这里描述一下原因,...在accept_queue被填充后,由用户线程通过accept系统调用从队列中获取对应的fd 值得注意的是,当用户线程来不及处理的时候,内核会drop掉三次握手成功的连接,导致一些诡异的现象,具体可以看笔者的另一篇博客...: https://www.cnblogs.com/alchemystar/p/13473999.html 另外,对于accept_queue具体的填充机制以及源码,可以见笔者另一篇博客的详细分析 《从Linux...源码看Socket(TCP)的listen及连接队列》: https://www.cnblogs.com/alchemystar/p/13845081.html 总结 Linux内核源码博大精深,每次扎进去探索时候都会废寝忘食
Linux下查看网卡驱动和版本信息 查看网卡生产厂商和信号 查看基本信息:lspci 查看详细信息:lspci -vvv # 3个小写的v 查看网卡信息:lspci | grep Ethernet
PostgreSQL 查看内存使用的方法比较多, 大部分都是进入到POSTGRESQL 中进行查看的,今天从PostgreSQL 外部来查看内存的使用方式和方法....在LINUX 中proc目录中有所有相关的进程的信息, PSS 通过下面的预计获得,所以RSS - PSS 等于的就是进程独享的内存 ps -u postgres o pid= | sed 's#.
已经很久很久没来得及写博客了,想想之前自己开始安装使用Linux系统的尝试,好像很简单!...下面开始Linux系统的安装:这里推荐U盘安装 首先你必须下载一个U盘ISO镜像写入工具,本人使用USBWrite,下载地址:https://sourceforge.net/projects/usbwriter...第四步重启电脑,进入Bios设置从U盘启动,然后保存确定退出,系统开始进入Linux安装界面,选择操作的语言,所属时区等,设置管理员账号密码,如果电脑已经安装Windon系统,这时会有提示是否需要安装双系统还是完全格式化硬盘...,只安装Linux....然后就是分区,请记住:Linux中一切皆文件。 安装Ubuntu成功最后界面: ? 后续持续更新更多内容,不在创业公司,压力远远没有那么大了,也有时间做些自己的事情了。
前言:昨天有个同学碰到发送udp包时收到destination unreachable的icmp包问题,本文简单介绍一下linux5.9中icmp包的处理流程。...我们从收到一个udp包开始分析,具体函数是udp_rcv。...收到icmp包的处理流程 我们从收到ip包开始分析。...我们再来看看哪里会调用这个函数。...icmp_socket_deliver(skb, info);} 继续看icmp_socket_deliver static void icmp_socket_deliver(struct sk_buff
再也不怕过时了,当然,现在内核的代码量级非常大,不可能看得完也不可能都看,只是选取自己感兴趣的一些点看一下。...看内核代码,总的来说是非常有趣的,不仅是因为知其然知其所以然,而且看到朴素的c语言,还有世界级大佬写代码的思路、思想,甚至注释,都是非常有意思的事情。...今天分析的内容是从socket函数开始,看看linux网络层的设计。下面我们看一下我们平时写网络编程代码时的用法。...网络层的初始化 从socket函数的定义中我们看到有family和type两个参数,这两个属性都会对应不同的实现。我们先看看family的实现。...rcu_assign_pointer(net_families[ops->family], ops); spin_unlock(&net_family_lock); return err;} 那么哪里会调用
可能有些应用程序只能通过源码安装。以下是操作方法。 译自 Linux: How To Install Apps From the Source,作者 Jack Wallen。...我刚开始使用Linux时,安装应用程序只有一种方法……从原始源代码安装。...接下来是AppImage,它允许你在任何平台上安装 Linux 应用程序。 剩下的就是从源代码安装。 为什么安装 Linux 应用程序的最古老方法排在列表的最后?这不仅仅是包管理器提供的简单性。...这可能是从源代码安装中最能阻止大多数人继续前进的部分。从源代码安装的问题在于,你必须首先满足所有依赖关系,然后才能尝试编译和安装该应用程序。...现在您已经从源代码安装了应用程序,您需要定期检查是否有新的更新可用。如果有,您将不得不再次执行相同的过程,这也是您应该坚持从默认包管理器安装应用程序的原因之一。
软件开发人员使用 Claude 执行从调试代码到解释 Git 操作和概念的各种任务。
笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。 大部分高性能网络框架采用的是非阻塞模式。...笔者这次就从linux源码的角度来阐述socket阻塞(block)和非阻塞(non_block)的区别。 本文源码均来自采用Linux-2.6.24内核版本。...由于网络协议非常复杂,内核里面用到了大量的面向对象的技巧,所以我们从创建连接开始,一步一步追述到最后代码的调用点。...>__sock_create 进一步分析__sock_create的代码判断: const struct net_proto_family *pf; // RCU(Read-Copy Update)是linux...希望笔者这篇文章能帮助到阅读linux网络协议栈代码的人。
前言 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。...今天笔者就来从Linux源码的角度看下Client端的Socket在进行Connect的时候到底做了哪些事情。由于篇幅原因,关于Server端的Accept源码讲解留给下一篇博客。...(基于Linux 3.10内核) 一个最简单的Connect例子 int clientSocket; if((clientSocket = socket(AF_INET, SOCK_STREAM, 0)...我们先看一下搜索端口号的逻辑,如下图所示: 获取端口号范围 首先,我们从内核中获取connect能够使用的端口号范围,在这里采用了Linux中的顺序锁(seqlock) void inet_get_local_port_range...重传的超时时间和 /proc/sys/net/ipv4/tcp_syn_retries 息息相关,Linux默认设置为5,建议设置成3,下面是不同设置的超时时间参照图。
前言 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。...今天笔者就来从Linux源码的角度看下Client端的Socket在进行Connect的时候到底做了哪些事情。...获取端口号范围 首先,我们从内核中获取connect能够使用的端口号范围,在这里采用了Linux中的顺序锁(seqlock) void inet_get_local_port_range(int *low...内核中修改的地方为: cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000 通过hash决定端口号起始搜索范围 在Linux上进行connect...重传的超时时间和 /proc/sys/net/ipv4/tcp_syn_retries 息息相关,Linux默认设置为5,建议设置成3,下面是不同设置的超时时间参照图。 ?
领取专属 10元无门槛券
手把手带您无忧上云