![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 55
熠熠微光
这个作者很懒,什么都没留下…
展开
-
【Linux】进程切换
操作系统为了控制进程的执行,必须有能力挂起正在CPU上运行的进程,并恢复以前挂起的某个进程的执行,这种行为被称为进程切换,任务切换或上下文切换或者说,进行进程切换就是从正在运行的进程中收回处理器,然后再使待运行进程来占用处理器。 这里所说的从某个进程收回处理器,实质上就是把进程存放在处理器的寄存器中的中间数据找个地方存起来,从而把处理器的寄存器腾出来让其他进程使用。那么被中止运行进程的中间数据存在何处好呢?当然这个地方应该是进程的私有堆栈。让进程来占用处理器,实质上是把某个进程存放在私有堆栈中寄存器的数原创 2022-05-24 22:41:13 · 1073 阅读 · 0 评论 -
【Linux】延迟相关数据
执行一个指令 1 nsL1缓存查询 0.5 ns分支预测错误 (Branch mispredict) 3 nsL2缓存查询 4 ns互斥锁/解锁 17 ns在1Gbps 的网络上发送2KB 44 ns主存访问 100 nsZippy 压缩 1KB 2,000 ns从内存顺序读取 1MB 3,000 nsSSD 随机读 16,000 ns从SSD 顺序读取 1MB 49,000ns同一个数据中心往返 500,000 ns从磁盘顺序读取 1MB 825,000 ns磁盘寻址 2,00.原创 2022-04-18 20:06:01 · 611 阅读 · 0 评论 -
【Linux】GDB底层调试原理
文章目录一、GDB调试模型二、GDB调试的系统调用三、GDB调试已经执行的服务进程四、断点的原理五、next的原理一、GDB调试模型GDB调试包括2个程序:gdb程序和被调试程序。根据这2个程序是否运行在同一台电脑中,可以把GDB的调试模型分为2种: 1. 本地调试 2. 远程调试本地调试:调试程序和被调试程序运行在同一台电脑中。远程调试:调试程序运行在一台电脑中,被调试程序运行在另一台电脑中。与本地调试相比,远程调试中多了一个GdbServer程序,它和目标程序都是运行在目标机中,可能是一台x8原创 2021-12-19 22:41:28 · 1265 阅读 · 0 评论 -
【Linux】申请巨页内存
一、原理概述操作系统对内存采用多级页表和分页进行管理,而操作系统每个页默认大小为4KB。如果进程使用的内存过大,比如1GB,这样会在页表中占用 1GB / 4KB = 262144个页表项,而系统TLB可以容纳的页表项远小于这个数量。当多个内存密集型应用访问内存时,会造成过多的TLB未命中。 因此在特定情况下会需要减少未命中次数,一个可行的办法就是增大每个页的尺寸。操作系统默认支持的大页是2MB,当使用1GB内存时,在页表中将占用 1GB / 2MB = 512个页表项,可以大大提升TLB命中率,进而原创 2021-10-20 20:04:45 · 1045 阅读 · 0 评论 -
【Linux】Valgrind工具集详解
文章目录一、简介二、入门三、打印信息说明四、抑制错误五、命令行详解六、使用Valgrind gdbserver和GDB调试程序七、Memcheck(内存错误检测器)一、简介一、Valgrind概述Valgrind是用于构建动态分析工具的仪器框架。它附带了一组工具,每个工具都执行某种调试,分析或类似任务,可帮助您改进程序。Valgrind的架构采用模块化设计,因此可以轻松创建新工具,而不会干扰现有结构。二、工具集列表1、Memcheck是一个内存错误检测器。它可以帮助您使程序,尤其是那些用C和C +转载 2021-08-22 18:24:58 · 3419 阅读 · 0 评论 -
【Linux】VIM使用技巧
1、. :重复上次修改2、x:删除光标下的字符3、u:撤销上次修改4、dd:删除一整行5、>G:增加当前行的缩进6、j:光标移动到下一行7、$:移动到行尾8、a:在当前光标后添加内容9、A:在当前行尾添加内容10、s:先删除光标下的字符,再进入插入模式11、f+:查找下一处字符“+”出现的位置,并移动光标12、;:重复查找上次 f 命令所查找的字符13、,:反向查找上次 f 命令所查找的字符复合命令等效的长命令Cc$sclS^CI原创 2021-06-02 11:38:58 · 149 阅读 · 0 评论 -
【Linux】隔核绑核
隔核:指定的cpu核心只参与最低限度的OS内核计算绑核:运行程序时只使用指定的CPU核心隔核方法1:修改grub环境:CentOS7具体步骤:vim /etc/default/grub 修改 GRUB_CMDLINE_LINUX="... ioslcpus=1-2,7-8" 隔离1,2,7,8核心grub2-mkconfig -o /boot/grub2/grub.cfg 更新配置reboot 重启cat /proc/cmdline 查看结果绑核方法1:taskset命令或设置线程属性原创 2021-05-13 17:53:18 · 5951 阅读 · 2 评论 -
【Linux】iptables详解
文章目录iptables简介iptables基础iptables和netfilter的关系iptables传输数据包的过程iptables的规则表和链表(tables)链(chains)规则表规则链规则表之间的优先顺序规则链之间的优先顺序(分三种情况)第一种情况:入站数据流向第二冲情况:转发数据流向第三种情况:出站数据流向管理和设置iptables规则iptables的基本语法格式防火墙处理数据包的四种方式iptables防火墙规则的保存与恢复iptables防火墙常用的策略1.拒绝进入防火墙的所有ICMP转载 2021-04-02 17:53:32 · 719 阅读 · 0 评论 -
【C/C++】gcc/g++参数详解
gcc 与 g++ 分别是 gnu 的 c & c++ 编译器 gcc/g++ 在执行编译工作的时候,总共需要4步:1、预处理,生成 .i 的文件[预处理器cpp]2、将预处理后的文件转换成汇编语言, 生成文件 .s [编译器egcs]3、有汇编变为目标代码(机器代码)生成 .o 的文件[汇编器as]4、连接目标代码, 生成可执行程序 [链接器ld]参数详解-x language filename设定文件所使用的语言, 使后缀名无效, 对以后的多个有效。也就是根据约定 C 语言的后缀名原创 2021-03-30 20:14:16 · 864 阅读 · 1 评论 -
【Linux】gdb调试coredump
一、coredump是什么Coredump叫做核心储,它是进程运行时在突然崩溃的那一刻的一个内存快照。操作系统在程序发生异常而异常在进程内部又没有被捕获的情况下,会把进程此刻内存、寄存器状态、运行堆栈等信息转储保存在一个文件里。该文件也是二进制文件,可以使用gdb、elfdump、objdump或者windows下的windebug、solaris下的mdb进行打开分析里面的具体内容。注:core是在半导体作为内存材料前的线圈,当时用线圈当做内存材料,线圈叫做core。用线圈做的内存叫做core me原创 2021-03-15 01:59:21 · 4438 阅读 · 0 评论 -
【C/C++】程序启动后马上停止,程序崩溃并出现core文件
博主是Linux C/C++开发,这篇文章用于记录工作中的一点经验QA提出这个bug后,交付我来修改,一开始我并没有复现此bug。但当我手速够快,程序一启动就马上停止时便会稳定复现根据生成的core文件,查看bt堆栈信息,可以锁定到线程的jion()处查看源代码if(pThread) { pThread->join(); delete pThread; pThread = nullptr;}第一步,修改join()为detach(),再尝试复现,但程序并未崩溃,由此推测线程卡原创 2021-03-03 16:51:59 · 577 阅读 · 1 评论 -
【Linux】git无法自动补全的解决办法
source /etc/bash_completion.d/git原创 2021-03-03 14:04:26 · 1070 阅读 · 1 评论 -
【Linux】常用抓包方式
1、网卡抓包tcpdump -i ens1f1 -s 0 -X -vvv -w 1.pcap当确定报文会通过ens1f1网卡时,便可以使用网卡抓包方式-i :指定网卡-s:snaplen,截断数据包。0表示不截断,默认只显示68字节-X:告诉tcpdump命令,需要把协议头和包内容都原原本本的显示出来-vvv:显示最详细的报文信息-w:将包写入文件中2、环路抓包tcpdump -i lo -s 0 -X -vvv -w 1.pcap当确定报文只在本地收发时,可以使用环路抓包,lo是l原创 2021-02-09 09:14:39 · 2048 阅读 · 0 评论 -
【SQL】No module named MYSQLdb 问题解决
问题描述:报错:ImportError: No module named MySQLdb对于不同的系统和程序有如下的解决方法:easy_install mysql-python (mix os)pip install mysql-python (mix os)apt-get install python-mysqldb (Linux Ubuntu)cd/usr/ports/databases/py-MySQLdb && make install clean (FreeBSD)原创 2021-01-08 10:23:02 · 419 阅读 · 0 评论 -
【Linux】addr2line调试so动态库
一、addr2lineaddr2line -e filename stackinfoeg:addr2line -e loaddate 0x4ae7e3addr2line的其他参数用法详情参考:so 动态库崩溃问题定位二、corefile coregdb filename coreeg:file core.61893 //由打印信息得知是loaddata的问题gbd loaddata core.61893 core的详细用法参考:Linux core 文件介绍...原创 2020-12-21 17:51:31 · 1638 阅读 · 0 评论 -
【Linux】“unable to detect graphics environment”的解决方法
首先vim ~/.bashrc1、在末尾添加export DISPLAY=映射到另一台机器上的IP地址:0.0如:export DISPLAY=192.168.1.1:0.02、在末尾添加export PATH=你要映射的程序的路径:${PATH}如:export PATH=/home/clion/bin:${PATH}然后source ~/.bashrc最后重新打开一个新的终端即可启动:感谢StackOverflow的这个助攻Unable to detect graphics environm原创 2020-11-24 09:54:05 · 7762 阅读 · 1 评论 -
【Linux】error while loading shared libraries错误解决办法
默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,通常通过源码包进行安装时,如果不指定–prefix,会将库安装在/usr/local/lib目录下;当运行程序需要链接动态库时,提示找不到相关的.so库,会报错。也就是说,/usr/local/lib目录不在系统默认的库搜索目录中,需要将目录加进去。首先打开/etc/ld.so.conf文件加入动态库文件所在的目录:执行vi /etc/ld.so.conf,在"include ld.so.conf.d/*.conf"下方增加"/转载 2020-11-12 09:03:45 · 4731 阅读 · 0 评论 -
【Linux】解压命令大全
.tar解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gunzip FileName.gz解压2:gzip -d FileName.gz压缩:gzip FileName.tar.gz 和 .tgz解压:tar zxvf FileName.tar.gz压缩:tar zcvf FileName.tar.gz DirName———————————————转载 2020-10-26 14:45:34 · 1228 阅读 · 0 评论 -
Linux编程之ICMP洪水攻击
ICMP洪水攻击属于大名鼎鼎的DOS(Denial of Service)攻击的一种,一种是黑客们喜欢的攻击手段,这里本着加深自己对ICMP的理解的目的,也试着基于ICMP写一段ICMP的洪水攻击小程序。 洪水攻击(FLOOD ATTACK)指的是利用计算机网络技术向目的主机发送大量无用数据报文,使得目的主机忙于处理无用的数据报文而无法提供正常服务的网络行为。ICMP洪水攻击:顾...转载 2018-07-28 23:02:00 · 857 阅读 · 0 评论 -
【TCP/IP】Linux之TCP/IP内核参数优化
本文以Ubuntu 12.04 LTS Desktop (x64)默认配置为例(机器的内存为4GB)/proc/sys/net目录所有的TCP/IP参数都位于/proc/sys/net目录下(请注意,对/proc/sys/net目录下内容的修改都是临时的,任何修改在系统重启后都会丢失),例如下面这些重要的参数:参数(路径+文件)描述默认值优化值/proc/sys/net/core/rmem_default默认的TCP数据接收窗口大小(字节)229376256960/转载 2020-10-10 17:47:20 · 411 阅读 · 1 评论 -
【Linux】xargs命令:一个给其他命令传递参数的过滤器
本文要为大家介绍的命令是 xargs,我们把它称为护花使者,因为它总是乐于协助其他的命令来完成一些事情。下面一起来看看它是如何护花的。xargs 是 execute arguments 的缩写,它的作用是从标准输入中读取内容,并将此内容传递给它要协助的命令,并作为那个命令的参数来执行。坊间有一种说法,将 xargs 解读为乘号(x)和参数(args)的合体,很形象地表达了 xargs 的作用所在。好了,我们一起来见识一下 xargs 的护花本领吧:#我们用ls命令列出当前路径下的文件, 包括3个文件转载 2020-10-09 19:12:10 · 256 阅读 · 0 评论 -
【Linux】查看、筛选、分析日志
总结一些平时查看日常或线上日志常用的Linux命令,主要包括查看、筛选、分析、统计的命令。文章目录查看日志筛选日志分析日志查看日志查看日志的命令主要有cat,tac,head,tail。(1)cat命令经常用于查看日志文件,打印连续的内容。对于日常或者线上的机器来说,往往日志文件很大,将连续的日志打印出来,并不能快速的找到结果,并不建议使用。(2)tac命令与cat命令恰恰相反,tac命令是将文件反序打印出来,从文件的最后一行开始打印。使用场景并不多。(3)head命令用于取出文件的前几行,.原创 2020-10-09 17:18:05 · 2997 阅读 · 1 评论 -
【Linux】scp命令
SCP(Secure Copy)Linux中的scp命令是用来进行远程文件拷贝的,数据传输使用ssh,并且和ssh使用相同的认证方式,提供相同的安全保证。这是一个非常方便有用的命令,在两台服务器之间直接传送文件,仅仅用 一个scp命令就完全解决了。scp在需要进行验证时会要求你输入对方的密码或口令基本命令语法从本地复制到远程:scp [可选参数] 本地用户名@IP地址:本地路径 远程用户名@IP地址:远程路径从远程复制到本地:scp [可选参数] 远程用户名@IP地址:远程路径 本地用户名@IP转载 2020-10-09 09:03:49 · 426 阅读 · 0 评论 -
【Linux】信号
SIGPIPESIGCHLDSIGPIPE网络程序必须要处理SIGPIPE信号,否则当客户端推出后,服务器仍然向该SOCKET发送信号,则会引起崩溃SIGCHLD这个信号处理不当的话,会产生僵尸进程,影响服务器性能僵尸进程是一个早已死亡的进程,但在进程表中仍占有位置Linux中当子进程结束时,它并没有完全被销毁,因为父进程还要用到它的信息当子进程结束时会发送SIGCHLD信号,若父进程没有处理这个信号,或调用 wait/waitpid() 等待子进程结束,就会产生僵尸进程更多Linux信号.原创 2020-06-30 16:11:43 · 216 阅读 · 0 评论 -
【Linux】常用命令大全
文章目录1、kill 中止进程命令2、du 查看当前目录下磁盘空间的使用情况3、df 查看整个文件系统磁盘空间的使用情况1、kill 中止进程命令对于nohup挂起的进程不要用kill -9,最好用-2或者-3的参数eg:ps -a \\列出所有进程的pidkill -2 pid \\中止对应pid的进程因为-9会强制停止,若被kill的进程正在进行读写操作,那么不仅可能会导致读写数据错误,也会有数据冗余在共享内存中,对于下一个使用共享内存的进程会造成数据错误2、du 查看当前目录下磁盘空间的原创 2020-10-22 15:04:42 · 156 阅读 · 0 评论