1.ifconfig源码分析
2.服务器端编程心得(六)—— 关于网络编程的一些实用技巧和细节
3.linux查看cpu占用率的方法:
4.学习笔记:搭建 Linux 内核网络调试环境(vscode + gdb + qemu)
5.在Linux中源码安装MariaDB
ifconfig源码分析
在ifconfig源码的main函数中,程序首先处理以 '-' 开始的参数,如 '-a' 和 '-s',并判断其作用。接着,尝试打开内核支持的Blued源码所有协议的套接字,通过调用sockets_open函数实现,如果失败,会输出错误信息并退出程序。 如果命令行参数为0,意味着显示所有网卡的信息,程序会调用if_print函数。如果用户提供了一个网卡名称,程序会将其复制到ifr.ifr_name中,并处理下一个参数,可能是协议簇名或选项。如果找到协议簇,将其af属性赋值给addr_family,并保存对应的套接字描述符skfd。 接下来,程序进入一个循环,处理剩余的参数。如果是开关参数,调用set_flag或clr_flag函数处理;如果是功能参数,直接通过ioctl函数处理。在处理IP地址时,会根据协议簇类型调用相应的ioctl函数,如SIOCSIFADDR,来设置接口的地址信息。扩展资料
ifconfig是linux中用于显示或配置网络设备(网络接口卡)的命令,英文全称是network interfaces configuring。配置网卡的IP地址语法例:ifconfig eth0 ..0.1 netmask ...0服务器端编程心得(六)—— 关于网络编程的一些实用技巧和细节
接触了多种项目,编写了大量网络编程代码,涉及 Windows 和 Linux 平台,自用布林源码积累了不少经验与心得。本文将分享网络编程的实用技巧与细节,希望对读者有所助益。
非阻塞的 connect() 函数编写:在创建 socket 时将其设置为非阻塞模式,使用 connect() 进行连接。若能立即连接成功返回 0,否则返回 -1 或 EINPROGRESS。通过 select() 检测 socket 是否可写来判断连接状态。在 Windows 平台上,除了 select(),也可使用 WSAAsyncSelect 或 WSAEventSelect 来检测。
非阻塞 socket 下的收发数据:在 Linux 和 Windows 平台,先用 select()、WSAAsyncSelect() 或 epoll_wait 检测 socket 有无数据可读或可写。对于收发数据的代码,Linux epoll 的 ET 模式要求一次性收完所有数据;水平模式或 Windows 平台则可根据业务需求一次性收取固定大小数据或直至数据收完。设置超时时间,检测整个收发过程是否超时。
上层业务解析数据包:处理数据包前先收取固定大小的包头信息,根据包头中指定的包体大小收取包体。确保包完整后解析并传递给上层业务逻辑。注意连续接收到的数据包可能有不同组合方式,需循环处理直至完整数据包出现。
nagle 算法:开启此算法时,小数据包可能不会立即发送,合并后一次性发送。若需实时性,可禁用此算法,以立即发送小数据包。Linux 默认开启,禁用方法为设置 noDelay 为 1。
select 函数参数问题:在 Linux 下,参数必须设置为所有 socket 描述符句柄中的vue apollo 源码解析最大值加 1;Windows 下兼容性考虑,参数可填任意值。
bind 函数绑定地址:使用 0.0.0.0 绑定任意网卡地址,使用 .0.0.1 绑定本地回环地址。前者允许从任意本地网卡连接,后者仅允许连接本地回环地址。
SO_REUSEADDR 和 SO_REUSEPORT:设置这两个选项,解决 socket 被系统回收后,短时间内无法重新绑定同一地址和端口的问题。Linux 实现更为严格,所有进程都受限,Windows 则允许本进程重复使用。
心跳包机制:通过定时发送心跳包维持连接正常。心跳包间隔时间可根据项目需求调整,确保连接状态检查与数据流量优化。客户端发送心跳包给服务器端,检测连接状态。
重连机制:在连接尝试失败后,设置递增的重试间隔时间。网络故障恢复时应立即尝试重连。Windows 下使用 IsNetworkAlive 检测网络状态变化。
EINTR 错误码处理:在 Linux 环境下,对于 network 函数检测 EINTR 错误码,表明函数因信号中断而未完成,应重新尝试或利用其他方式检查状态。
减少系统调用:优化高性能服务器程序时,尽量减少系统调用。例如,在主循环中缓存时间获取结果,避免重复调用系统函数。
忽略 SIGPIPE 信号:在 Linux 平台上,当侦听 socket 关闭后,对端发送数据会导致 SIGPIPE 信号。应忽略此信号,表情包 php源码避免进程因异常终止。
CppGuide 学习资料:为 C/C++ 开发者准备的全面学习资源,涵盖语言基础、网络编程、操作系统原理、项目源码分析等,同时提供学习方法、推荐书籍、简历指导和求职技巧等内容。
linux查看cpu占用率的方法:
top
top是最常用的查看系统资源使用情况的工具,包括CPU、内存等等资源。这里主要关注CPU资源。
1.1 /proc/loadavg
load average取自/proc/loadavg。
9. 9. 8. 3/
前三个数字是1、5、分钟内进程队列中平均进程数,包括正在运行的进程+准备好等待运行的进程。
第四个数字分子表示正在运行的进程数,分母是进程总数。
最后一个数字是最近运行的进程ID号。
其中top取的是/proc/loadavg的前三个数。
1.2 top使用
打开top,可以指定更新的周期。
输入H,打开隐藏的线程;输入1,可以显示单核CPU使用情况。
top -H -b -d 1 -n > top.txt,每个1秒统计一次,共次,显示线程细节,并保存到top.txt中。
top采样来源你还依赖于/proc/stat和/proc//stat两个,必赢论坛源码这两个的详细介绍参考:/proc/stat和/proc//stat。
其中CPU信息对应的含义如下:
us是user的意思,统计nice小于等于0的用户空间进程,也即优先级为~。 ni是nice的意思,统计nice大于0的用户空间进程,也即优先级为~。 sys是system的意思,统计内核态运行时间,不包括中断。 id是idle的意思,几系统处于空闲态。 wa是iowait的意思,统计io等待时间。 hi是hardware interrupt,统计硬件中断时间。 si是software interrupt,统计软中断时间。 最后的st是steal的意思。
perf
通过sudo perf top -s comm,可以查看当前系统运行进程占比。
这里不像top一样区分idle、system、user,这里的占比是各个进程在总运行时间里面占比。
通过sudo perf record记录采样信息,然后通过sudo perf report -s comm。
sar、ksar
sar是System Activity Report的意思,可以用于实时观察当前系统活动,也可以生成历史记录的报告。
要使用sar需要安装sudo apt install sysstat,然后对sysstat进行配置。
sar用于记录统计信息,ksar用于将记录的信息图形化输出。
ksar下载地址在: github.com/vlsi/ksar/re...
sudo gedit /etc/default/sysstat--------------------------------将 ENABLED=“false“ 改为ENABLED=“true“。 sudo gedit /etc/cron.d/sysstat--------------------------------修改sar的周期等配置。 sudo /etc/init.d/sysstat restart--------------------------------重启sar服务 /var/log/sysstat/--------------------------------------------------sar log存放目录
使用sar记录开机到目前的统计信息到文件sar.txt。
LC_ALL=C sar -A > sar.txt
PS:这里直接使用sar -A,在ksar中无法正常显示。
如下执行java -jar ksar.jar,然后Data->Load from text file...选择保存的sar.txt文件。
得到如下的图表。
还可以通过sar记录一段时间的信息,指定采样周期和采样次数。
这些命令前加上LC_ALL=C之后保存到文件中,都可以在ksar中图形化显示。
collectl、colplot
collectl是一款非常优秀并且有着丰富的命令行功能的实用程序,你可以用它来采集描述当前系统状态的性能数据。
不同于大多数其它的系统监控工具,collectl 并非仅局限于有限的系统度量,相反,它可以收集许多不同类型系统资源的相关信息,如 cpu 、disk、memory 、network 、sockets 、 tcp 、inodes 、infiniband 、 lustre 、memory、nfs、processes、quadrics、slabs和buddyinfo等。
同时collectl还可以替代常用工具,比如top、vmstat、ps、iotop等。
安装collectl:
sudo apt-get install collectl
collectl的使用很简单,默认collectl显示cpu、磁盘、网络信息。
collectl还可以显示更多的子系统信息,如果选项存在对应的大写选项,大写选项表示更细节的设备统计信息。
b – buddy info (内存碎片) c – 所有CPU的合一统计信息;C - 单个CPU的统计信息。 d – 整个文件系统Disk合一统计信息;C - 单个磁盘的统计信息。 f – NFS V3 Data i – Inode and File System j – 显示每个CPU的Interrupts触发情况;J - 显示每个中断详细触发情况。 l – Lustre m – 显示整个系统Memory使用情况;M - 按node显示内存使用情况。 n – 显示整个系统的Networks使用情况;N - 分网卡显示网络使用情况。 s – Sockets t – TCP x – Interconnect y – 对系统所有Slabs (系统对象缓存)使用统计信息;Y - 每个slab使用的详细信息。
collectl --all显示所有子系统的统计信息,包括cpu、终端、内存、磁盘、网络、TCP、socket、文件系统、NFS。
collectl --top可以代替top命令:
collectl --vmstat可以代替vmstat命令:
collectl -c1 -sZ -i:1可以代替ps命令。
collectl和一些处理分析数据工具(比如colmux、colgui、colplot)结合能提供可视化图形。
colplot是collectl工具集的一部分,其将collectl收集的数据在浏览器中图形化展示。
colplot的介绍 在此,相关源码可以再 collectl-utils下载。
解压下载的colplot之后,sudo ./INSTALL安装colplot。
安装之后重启apache服务:
suod systemctl reload apache2 sudo systemctl restart apache2
在浏览器中输入 .0.0.1/colplot/,即可使用colplot。
通过Change Dir选择存放经过collectl -P保存的数据,然后设置Plot细节、显示那些子系统、plot大小等等。
最后Generate Plot查看结果。
学习笔记:搭建 Linux 内核网络调试环境(vscode + gdb + qemu)
本文主要介绍了如何搭建Linux内核网络调试环境,主要步骤包括: 首先,使用VM(虚拟机)和Ubuntu .,配置dhcp方式的网络,绑定主机网卡,确保获得有效IP地址和DNS配置。 接着,安装和配置内核源码、gdb,进行内核的编译,并测试gdb是否能正确调试内核。 然后,使用qemu模拟器进行测试,特别提到一个关键问题:qemu的bzImage与gdb的vmlinux如何匹配。实际调试中,你需要确保gdb服务器与qemu的vmlinux关联正确。 对于非图形化的gdb,可以借助VSCode进行更便捷的调试。配置步骤包括设置远程连接Ubuntu、内核源码查阅和开启调试功能。 在VSCode中,创建Linux配置,安装相关插件后,可通过“运行”->“添加配置”启动调试。 在调试过程中,qemu需启用调试模式,通过输入's',VSCode可以捕获断点并进行深入调试。 为了实现外网通信,需要在VM中设置网桥,将qemu接口连接到网络。 测试阶段,可以将监听地址从.0.0.1调整为VM所在网段的地址,便于telnet测试。在Linux中源码安装MariaDB
在CentOS 8(位)阿里云Linux 3. LTS服务器上,通过源码安装MariaDB .5.的详细步骤如下:
首先,访问MariaDB官网下载对应版本的源码包,下载地址为:mariadb.org/download/?...
下载完成后,使用WinSCP 5..4工具将mariadb-.5..tar.gz上传到服务器的/usr/local/src目录。
为了顺利安装,检查系统上是否有与MariaDB冲突的MySQL版本,可通过执行`rpm -qa | grep mysql`进行检测。如果存在,可以使用`rpm -e --nodeps`命令卸载,如"mysql-libs-5.1.-1.el6_0.1.x_"。
接着,确认服务器上没有mariadb数据库,同样使用`rpm -qa | grep mariadb`检查。如有,也需卸载。
然后,配置环境,安装依赖,如autoconf、cmake等。在服务器上使用`yum install -y ...`命令安装。
创建data文件夹,并解压和重命名源码文件。接着,进入安装目录,执行cmake编译安装命令,配置安装路径和数据库相关参数。
编译完成后,编辑`/etc/profile`文件并添加环境变量,创建my.cnf文件,调整文件权限。初始化数据库,确保`mysql.server start`命令执行成功。
将启动脚本添加到开机初始化目录,设置mysql服务开机启动。登录MariaDB,执行`mysql_secure_installation`设置root账号密码。
最后,重启mysql服务并测试登录,确认安装和配置完成。如果有任何问题,如登录失败,应检查服务状态并重新初始化和启动。