首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Linux异常信号——Signal

近期接触了Linux平台测试,遇到了软件发生异常,从而接触到了 Linux平台下Signal——信号,用来通知进程发生了异步事件。...作为测试,免不了需要初步判断一下是否是正在异常,因此学习了一下Signal NO 1 信号事件发生有两个来源: 硬件来源(比如我们按下了键盘或者其它硬件故障); 软件来源,最常用发送信号系统函数是...NO 2 Linux支持信号列表如下(很多信号是与机器体系结构相关) 信号值 默认处理动作 发出信号原因 SIGHUP 1 A 终端挂起或者控制进程终止...E 信号不能被捕获 F 信号不能被忽略 了解了以上信息后,再来看软件生成异常log文件,其他信息可以暂时不关注,将log信息中Signal字段找出来,解读后面的数值 未了解之前: 跟开发了解了软件在出现异常时会写...,目前位置没有遇到过 以上简单分享了LinuxSignal含义,以及一些常用信号值,后续还会继续有分享哟

4.4K20

Linux内核20-Linux内核异常处理过程

异常处理基本过程 当异常发生时,Linux内核给造成异常进程发送一个信号,告知其发生了异常。...但是,除了这些常规异常以外,Linux有时候会特意利用某些CPU异常管理硬件资源。...还可以使用Page Fault页错误异常,用来推迟给进程分配新页帧,直到该分配时候。因为它异常处理程序极其复杂,我们在后续文章中再详细叙述这一部分内容。...异常处理程序基本上都是下面这样代码:(所有的异常和中断处理函数都可以在linux\arch\x86\entry\entry_32.S文件中找到) handler_name: pushl $0...然后就是把异常处理程序(C代码)地址压栈。这个函数命名方式是在异常处理函数名称前缀do_字符。

1.4K70

Linux进程内存管理之缺页异常

通过《Linux进程内存管理之malloc和mmap》我们知道,这两个函数只是建立了进程vma,但还没有建立虚拟地址和物理地址映射关系。...当进程访问这些还没建立映射关系虚拟地址时,处理器会自动触发缺页异常。 ARM64把异常分为同步异常和异步异常,通常异步异常指的是中断(可看《上帝视角看中断》),同步异常指的是异常。...关于ARM异常处理文章可参考《ARMv8异常处理简介》。...(虚拟页到0页映射),第二次是写时复制缺页异常处理。...由于内存和磁盘读写性能差异较大,Linux会在内存充裕时将空闲内存当作swap cache,用来缓存磁盘数据,以提高I/O性能。相对在内存紧张时Linux会将这些缓存回收,将脏页回写到磁盘中。

2.4K31

NULL指针奇妙之旅

运行旅行 当一切环境都搭建好之后,程序就需要去执行它使命了,我们可以将NULL指针程序反汇编,反汇编内容很多,我们只看main函数反汇编,这里使用是aarch64-linux-gnu-objdump...对于我们例子,*p对于地址是NULL,如果CPU去执行访问,MMU会判断此地址是非法,则就会触发data abort异常 触发异常会跳转到对应体系结构异常向量表出执行,这里以ARM64为例 异常旅行...,其中EL0就是userspace, EL1就是Linux kernel, El2 是hyper, EL3是Secure mode。...Bits[31:26] 用来确定异常类型,Exception class Bit[25]: 用来确定异常指令长度,0代表16位异常指令,1代表32位异常 Bits[24:0]: 用来确定具体异常...SEGV_ACCERR : SEGV_MAPERR, (void __user *)addr, inf->name); 内核最终会调用arm64_force_sig_fault方式通知应用程序,而此处信号类型是

1.1K20

linux缺页异常处理--内核空间

缺页异常被触发通常有两种情况—— 程序设计不当导致访问了非法地址 访问地址是合法,但是该地址还未分配物理页框. 下面解释一下第二种情况,这是虚拟内存管理一个特性。...,程序在一定时间内所访问内存往往是有限,因此内核只会在进程确确实实需要访问物理内存时才会将相应虚拟内存区域与物理内存进行关联(为相应地址分配页表项,并将页表项映射到物理内存),也就是说这种缺页异常是正常...,而第一种缺页异常是不正常,内核要采取各种可行手段将这种异常带来破坏减到最小。...缺页异常处理函数为do_page_fault(),该函数是和体系结构相关一个函数,缺页异常来源可分为两种,一种是内核空间(访问了线性地址空间第4个GB),一种是用户空间(访问了线性地址空间0~...3GB),以X86架构为例,先来看内核空间异常处理。

1.9K20

Linux 2.6.16 TCP 连接速度异常问题分析

问题现象: 在体验网环境下测试:大文件下载情况下,百度下载速度平均在600KBPS,我们下载速度平均低于100Kbps;互娱Webgame情况下,TNT业务下载速度大约是DDT25%。...这里是一个典型下载速度曲线: 我们服务器曲线:(纵轴单位:包/s) 百度服务器下载曲线: 重现该问题测试环境: 网络: 公司体验网,普通联通4M ADSL 服务器:Linux64位服务器...n = If n outstanding ACKs before timed interval, sent ACK) 因为无法强制用户通过修改注册表避免问题,并且竞争对手也没有看到类似问题,因此只能从linux...Linux这一端,首先怀疑和nagle算法有关系,在nws服务器上设置TCP_NODELAY以后仍然可以重现,可以排除Nagle算法影响。...因为每次linux仅发送一个数据包,因此怀疑拥塞窗口问题,推测问题如下: 初始情况下,客户端回复一个ACK时,拥塞窗口增大,每次发送多个数据包,因此刚开始可以有较快传输速度;因为网络延时抖动或丢包导致服务器协议栈判定数据包超时

4.8K00

linux free swap为负异常处理

swap介绍  物理内存是计算机实际内存大小,由RAM芯片组成。虚拟内存则是虚拟出来、使用磁盘代替内存。虚拟内存出现,让机器内存不够情况得到部分解决。...当程序运行起来由操作系统做具体虚拟内存到物理内存替换和加载(相应页与段虚拟内存管理)。这里虚拟内存即所谓swap。   当用户提交程序,然后产生进程在机器上运行。...根据这种换入和换出,实现了内存循环利用,让用户感觉不到内存限制。从这也可以看出swap扮演了一个非常重要角色,就是暂存被换出进程。...这次遇到情况如下,通过free命令查询显示为负数,free -h直接就core了。 经查是由于/swapfile1文件被删除导致,重启解决。。...文件 cat /proc/swaps #查看当前swap使用情况,proc是内存内信息不可修改 swapoff /swapfile1 #关闭swap # mkswap /data1

4.3K30

Linux内核18-中断和异常嵌套处理

所以,内核态程序被激活方式有: 系统调用(异常一种) 异常 中断 内核线程 上面的任意一种方式,都可以让CPU执行内核态代码。...假设内核没有bug,那么大部分异常发生在用户态。实际上,要么是编程错误,要么是调试器故意触发。而页错误异常发生在内核态,它是内核在访问物理地址时不存在引发异常。...处理这样异常,内核挂起当前进程,切换到新进程,直到该请求页可用。因为页错误异常绝不会引发进一步异常,所以,有关联内核控制路径最多是2个(第一个是系统调用造成,第二个是页错误造成)。...所以,中断执行不会引起进程切换,也就可以无限嵌套处理。 中断处理程序可以打断中断或异常处理程序执行,但是反过来,异常不能打断中断处理程序。...中断处理程序绝对不能包含页错误操作,因为这会诱发进程切换。 Linux嵌套执行中断或异常处理程序两个主要原因是: 为了提高可编程中断控制器和设备控制器吞吐量。

2K20

Linux系统编程 - 进程异常自动重启

Linux系统编程 - 进程异常自动重启 开篇   在Linux平台,自研服务进程通常以守护进程形式在后台常驻运行。但偶尔也会遇到服务进程异常crash,导致产品基本功能异常,影响恶劣。  ...则可以通过这点,实现进程异常crash重启。 「方案一」   在《Linux系统编程》中,有讲道:当子进程终止时,会发送SIGCHLD至父进程。...父进程注册信号SIGCHLD监听,在处理函数中,通过wait()/waitpid()获取异常子进程pid。 通过pid匹配异常进程对应bin文件路径,再重新拉起此进程。...其中,方案一是触发式监测,属于其中最优雅方法。但是在实测过程中发现,子进程异常终止时,父进程存在小概率收到不到信号SIGCHLD,网上说法是SIGCHLD不可靠。...经过此方案,在Linux系统部署用户进程时,加入此方案,能够避免进程异常导致系统宕机等其他严重问题。

28320

Linux系统异常排查实践与总结

[TOC] 0x00 前言 描述:本文章主要针对于本人日常运维所遇到一些性能问题并进行总结解决思路流程; 无论是 CPU 使用率,还是平均负载,都只是反映系统健康状态度量指标,而不是问题根因; 因此它们价值主要体现在两个方面...---- #### 0x01 Linux信息收集 描述:当我们对异常系统进行处理,必须先进行主机基础信息收集,以防出错后可以更快恢复或者求助; CentOS系列: #!...,core和thread数量 #!...echo "Hyper-Threading: off" else echo "Hyper-Threading: on" fi echo echo '===== END =====' 0x02 异常解决...] #比如0x431 #4.jstack日志异常查询 jstack 1040|vim +/0x431 - #5.定位具体异常业务使用 pwdx 命令根据 pid 找到业务进程路径 pwdx [PID

1.1K31
领券