收到这个信号的时候,程序是可以生成core文件的。不过通过日志我们可以知道进程9453退出时没有生成core文件。...9581 exited on signal 11 (SIGSEGV - core dumped) after 15.921916 seconds from start core dump文件对于诊断Linux...中程序的问题非常有用。...当程序异常退出的时候,可能会生成core文件。如,程序写一个不属于他的内存,操作系统出于保护,会发信号给程序,程序可能会因此而退出,退出的时候可能会生成core文件。...这篇文章主要是阐述生成core文件需要做的一些设置。 如何生成core文件 默认Linux操作系统是不允许生成core文件的。
背景 幸福的生活总是相似的,天降的大锅各有各不同。...我们有个功能是这样的:有个以 root 运行的 python 程序,它需要以 test 用户执行 linux 命令,所以就通过 subprocess 库 + sudo 来执行,也就是下面的关系图: image.png.../test_b 就是这么一个很简单的需求,本来是没有什么太大的问题的,然而事实总是喜欢打我们脸。...凭借过硬的英语水平,我们可以看到这个错误应该在 shell 初始化时候报的,这样很明显啦,去搜 bash 代码。...我心目中的 system 不是这么随便的!
近期接触了Linux平台的测试,遇到了软件发生异常,从而接触到了 Linux平台下的Signal——信号,用来通知进程发生了异步事件。...作为测试,免不了需要初步判断一下是否是正在的异常,因此学习了一下Signal NO 1 信号事件的发生有两个来源: 硬件来源(比如我们按下了键盘或者其它硬件故障); 软件来源,最常用发送信号的系统函数是...NO 2 Linux支持的信号列表如下(很多信号是与机器的体系结构相关的) 信号值 默认处理动作 发出信号的原因 SIGHUP 1 A 终端挂起或者控制进程终止...E 信号不能被捕获 F 信号不能被忽略 了解了以上信息后,再来看软件生成异常的log文件,其他的信息可以暂时不关注,将log信息中的Signal字段找出来,解读后面的数值 未了解之前: 跟开发了解了软件在出现异常时会写...,目前位置没有遇到过 以上简单分享了Linux下的Signal的含义,以及一些常用的信号值,后续还会继续有分享哟
异常处理的基本过程 当异常发生时,Linux内核给造成异常的进程发送一个信号,告知其发生了异常。...但是,除了这些常规的异常以外,Linux有时候会特意利用某些CPU异常管理硬件资源。...还可以使用Page Fault页错误异常,用来推迟给进程分配新的页帧,直到该分配的时候。因为它的异常处理程序极其复杂,我们在后续的文章中再详细叙述这一部分的内容。...异常处理程序基本上都是下面这样的代码:(所有的异常和中断处理函数都可以在linux\arch\x86\entry\entry_32.S文件中找到) handler_name: pushl $0...然后就是把异常处理程序(C代码)的地址压栈。这个函数的命名方式是在异常处理函数的名称前缀do_字符。
文章时间:2020年3月5日 09:59:20 解决问题:系统时间异常,修复系统时间 CentOS系统 yum install ntpdate ntpdate 某个服务器节点 Ubuntu系统
通过《Linux进程的内存管理之malloc和mmap》我们知道,这两个函数只是建立了进程的vma,但还没有建立虚拟地址和物理地址的映射关系。...当进程访问这些还没建立映射关系的虚拟地址时,处理器会自动触发缺页异常。 ARM64把异常分为同步异常和异步异常,通常异步异常指的是中断(可看《上帝视角看中断》),同步异常指的是异常。...关于ARM异常处理的文章可参考《ARMv8异常处理简介》。...(虚拟页到0页的映射),第二次是写时复制缺页异常处理。...由于内存和磁盘的读写性能差异较大,Linux会在内存充裕时将空闲内存当作swap cache,用来缓存磁盘数据,以提高I/O性能。相对的在内存紧张时Linux会将这些缓存回收,将脏页回写到磁盘中。
运行旅行 当一切环境都搭建好之后,程序就需要去执行它的使命了,我们可以将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的方式通知应用程序,而此处的信号类型是
缺页异常被触发通常有两种情况—— 程序设计的不当导致访问了非法的地址 访问的地址是合法的,但是该地址还未分配物理页框. 下面解释一下第二种情况,这是虚拟内存管理的一个特性。...,程序在一定时间内所访问的内存往往是有限的,因此内核只会在进程确确实实需要访问物理内存时才会将相应的虚拟内存区域与物理内存进行关联(为相应的地址分配页表项,并将页表项映射到物理内存),也就是说这种缺页异常是正常的...,而第一种缺页异常是不正常的,内核要采取各种可行的手段将这种异常带来的破坏减到最小。...缺页异常的处理函数为do_page_fault(),该函数是和体系结构相关的一个函数,缺页异常的来源可分为两种,一种是内核空间(访问了线性地址空间的第4个GB),一种是用户空间(访问了线性地址空间的0~...3GB),以X86架构为例,先来看内核空间异常的处理。
问题现象: 在体验网环境下测试:大文件下载的情况下,百度的下载速度平均在600KBPS,我们的下载速度平均低于100Kbps;互娱Webgame情况下,TNT业务下载速度大约是DDT的25%。...这里是一个典型的下载速度曲线: 我们的服务器的曲线:(纵轴单位:包/s) 百度的服务器下载的曲线: 重现该问题的测试环境: 网络: 公司体验网,普通联通4M ADSL 服务器:Linux64位服务器...n = If n outstanding ACKs before timed interval, sent ACK) 因为无法强制用户通过修改注册表避免问题,并且竞争对手也没有看到类似问题,因此只能从linux...Linux这一端,首先怀疑和nagle算法有关系,在nws服务器上设置TCP_NODELAY以后仍然可以重现,可以排除Nagle算法的影响。...因为每次linux仅发送一个数据包,因此怀疑拥塞窗口的问题,推测问题如下: 初始情况下,客户端回复一个ACK时,拥塞窗口增大,每次发送多个数据包,因此刚开始可以有较快的传输速度;因为网络延时抖动或丢包导致服务器协议栈判定数据包超时
看了Linaro提供的开源ARMv8 Linux内核源代码,发现ARMv8异常处理与ARMv7及之前的架构有所不同,简单分析。...LinaroARMv8工程:http://www.linaro.org/engineering/engineering-projects/armv8 1.1 Linux内核异常处理相关文件 Linux内核中...entry.S包括异常的入口、进入异常处理C函数前的压栈、退出C函数前的出栈、一些fork函数相关的处理代码(暂不分析)、任务切换汇编处理过程(cpu_switch_to函数,暂不分析)。...,对于XXX_invalid类异常都是不真正处理的。...分析见代码最后面 bl do_mem_abort //传给该函数的x0发生异常的地址信息,x1是异常类型。x2就是压入栈中的寄存器堆首地址。
swap介绍 物理内存是计算机的实际内存大小,由RAM芯片组成。虚拟内存则是虚拟出来的、使用磁盘代替内存。虚拟内存的出现,让机器内存不够的情况得到部分解决。...当程序运行起来由操作系统做具体虚拟内存到物理内存的替换和加载(相应的页与段的虚拟内存管理)。这里的虚拟内存即所谓的swap。 当用户提交程序,然后产生进程在机器上运行。...根据这种换入和换出,实现了内存的循环利用,让用户感觉不到内存的限制。从这也可以看出swap扮演了一个非常重要的角色,就是暂存被换出的进程。...这次遇到的情况如下,通过free命令查询显示为负数,free -h直接就core了。 经查是由于/swapfile1文件被删除导致的,重启解决。。...文件 cat /proc/swaps #查看当前swap的使用情况,proc是内存内的信息不可修改 swapoff /swapfile1 #关闭swap # mkswap /data1
前言: 在研究Linux调用C Main入口的时候,发现它居然使用缺页异常来调用间接调用的Main,感觉有点不可思议。...,它首先会尝试调用设置的IP Register。...frame #0: 0x00000000004016b0 error: memory read failed for 0x401600 什么是缺页异常: 当前指令要访问的内存不存在,或者无法读写内存。...exc_page_fault函数处理了这个缺页异常,让它能够访问用户态的第一个地址,也就是Glibc前面的_start函数,从而顺利的访问C Main。...__switch_to和switch_to和里的jmp和call。 ret_from_fork的Assembly代码。 第一个断点在thread_start的new_ip设置之后,否则无法断下。
所以,内核态程序被激活的方式有: 系统调用(异常的一种) 异常 中断 内核线程 上面的任意一种方式,都可以让CPU执行内核态的代码。...假设内核没有bug,那么大部分的异常发生在用户态。实际上,要么是编程错误,要么是调试器故意触发的。而页错误异常发生在内核态,它是内核在访问物理地址时不存在引发的异常。...处理这样的异常,内核挂起当前进程,切换到新进程,直到该请求页可用。因为页错误异常绝不会引发进一步的异常,所以,有关联的内核控制路径最多是2个(第一个是系统调用造成的,第二个是页错误造成的)。...所以,中断的执行不会引起进程的切换,也就可以无限嵌套处理。 中断处理程序可以打断中断或异常处理程序执行,但是反过来,异常不能打断中断处理程序。...中断处理程序绝对不能包含页错误的操作,因为这会诱发进程切换。 Linux嵌套执行中断或异常处理程序的两个主要原因是: 为了提高可编程中断控制器和设备控制器的吞吐量。
最近的项目一直在window平台编写和测试,今天转移到linux平台上,莫名出现验证码无法显示的问题,如图 而我本地一切正常 第一个反应是字体版权在linux平台受限,尝试更换字体无解。...然后检查了一下本地和远程虚拟主机上的PHP版本,发现远程虚拟主机的GD库版本只有2.0.0而我本地已经是2.1.0的了,马上联系服务商,服务商告知GD库不能升级。无奈只好在程序上做文章了。...GD库低于2.0.18的情况下,使用putenv()函数配置环境, 代码: putenv('GDFONTPATH=' . realpath('.')); 然后继续使用原来的字体变量即可 $font
16 系统出现异常排查思路 16.1 查看用户信息 16.1.1查看当前的用户 # who 04:39:39 up 1:30, 1 user, load average: 0.01, 0.01,...16.9.1 查看磁盘的使用情况 # iostat Linux 2.6.32-573.el6.x86_64 (hadoop1) 10/21/2016 _x86_64_(1 CPU) avg-cpu:...# mpstat 2 10 Linux 2.6.32-573.el6.x86_64 (hadoop1) 10/21/2016 _x86_64_(1 CPU) 05:37:26 AM CPU %...irq的序号, 在各自cpu上发生中断的次数,可编程中断控制器,设备名称(request_irq的dev_name字段) # cat /proc/interrupts CPU0...16.15.1 显示linux内核的环形缓冲区信息 # dmesg [ tail / less / grep / more ] ************* eth0: no IPv6 routers
查异常 cat -n abc.log |grep Exception|more 如找到行数为:5201314行,再查看该行前后的异常信息 cat -n abc.log |tail -n +5201314...|head -n 30 以下图片 出自菜鸟教程: http://www.runoob.com/linux/linux-comm-tail.html http://www.runoob.com/linux.../linux-comm-cat.html 命令解说:
Linux系统编程 - 进程异常自动重启 开篇 在Linux平台,自研服务进程通常以守护进程的形式在后台常驻运行。但偶尔也会遇到服务进程异常crash,导致产品基本功能异常,影响恶劣。 ...则可以通过这点,实现进程异常crash的重启。 「方案一」 在《Linux系统编程》中,有讲道:当子进程终止时,会发送SIGCHLD至父进程。...父进程注册信号SIGCHLD监听,在处理函数中,通过wait()/waitpid()获取异常子进程的pid。 通过pid匹配异常进程对应的bin文件路径,再重新拉起此进程。...其中,方案一是触发式监测,属于其中最优雅的方法。但是在实测过程中发现,子进程异常终止时,父进程存在小概率收到不到信号SIGCHLD,网上的说法是SIGCHLD不可靠。...经过此方案,在Linux系统部署用户进程时,加入此方案,能够避免进程异常导致的系统宕机等其他严重问题。
在Linux下支持的信号(具体信号kill -l命令查看): SEGV, ILL, FPE, BUS, SYS, CPU, FSZ, ABRT, INT, TERM, HUP, USR1, USR2,...QUIT, BREAK, TRAP, PIPE 在Windows下支持的信号: SEGV, ILL, FPE, ABRT, INT, TERM, BREAK 备注:通过k8s结合java支持的信号处理eureka
我们的服务器xxx.xxx.xxx.95是8核8G的配置,另外的服务器xxx.xxx.xxx.215是4核8G的配置, 这两个服务器运行同样的java服务,java的jvm配置完全一样,qps也是一样的...但是95服务器的load值一直比215服务器高很多。 经过反复检查: 1)由于我们服务是在阿里云,刚开始我以为是宿主主机的问题, 和阿里云沟通后,迁移到其他宿主区里主机上。...appuser@iZ25lwzc3tkZ:/home$ taskset -pc 2125 pid 2125's current affinity list: 0-7 3)通过反复思考,最后想到linux...的内核。...内核为3.13.0-65-generic 最后我们对 8核的95服务器进行系统升级,最后发现load立马正常:可以看到8个cpu均匀的被使用。
[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
领取专属 10元无门槛券
手把手带您无忧上云