做过Linux开发的人通常遇到过一个进程不能kill掉的情况,即使使用的是kill -9方式,而一般的教课书都只说kill -9能杀死任何进程,遇到这种情况时就会感觉到很矛盾,其它这也是正常的,通常有两种情况是不能...kill掉的: 一是进程已经成为僵死进程,当它的父进程将它回收或将它的父进程kill掉即可在ps输出看不到了; 二是进程正处在内核状态中,Linux进程运行时分内核和用户两种状态,当进程进入内核状态后,
为了定时监控Linux系统CPU、内存、负载的使用情况,写了Linux Shell脚本,当达到一定值得时候,定时发送邮件通知。.../mimvp-email.sh)是正常的,因为手动执行脚本可以默认获取Linux的环境变量,但通过Crontab做的定时任务,则无法获取环境变量。...分析了原因,crond不执行的原因主要有以下几个方面: 1、crond服务没启动 ps -ef | grep -v grep | grep crond // 查看crond服务是否运行...附上linux下的flock的用法: flock (util-linux 2.13-pre7) Usage: flock [-sxun][-w #] fd# flock [-sxon][-...error: "(" unexpected 解决方法: 需指定shell解释器命令:SHELL=/bin/bash(请参见上面 crontab编辑示例 SHELL=/bin/bash) 或者参见: LINUX
oom_adj的值在-16 到 +15之间,值越高被kill的优先度越高。当该值为-17时,系统将不会杀死指定pid的进程,而-16~15则会使得进程的/pro...
前面已经分析过了Intel的内存映射和linux的基本使用情况,已知head_32.S仅是建立临时页表,内核还是要建立内核页表,做到全面映射的。...其中直接内存映射区是指3G到3G+896M的线性空间,直接对应物理地址就是0到896M(前提是有超过896M的物理内存),其中896M是high_memory值,使用kmalloc()/kfree()接口操作申请释放...; 而高端内存映射区则是至超多896M物理内存的空间,它又分为动态映射区、永久映射区和固定映射区。...也就是为什么存在PMD_SHIFT、PUD_SHIFT和PGDIR_SHIFT,还有pgtable-nopmd.h、pgtable-nopud.h和Pgtable-2level_types.h的原因了。...需要说明的是这里的max_low_pfn作为直接映射空间区的内存最大可用页帧号,并不是896M大小内存的页面数。896M只是定义高端内存的一个界限,至于直接映射内存大小只定义了不超过896M而已。
ZONE_NORMAL 的范围是 16M~896M,该区域的物理页面是内核能够直接使用的。 ZONE_HIGHMEM 的范围是 896M~结束,该区域即为高端内存,内核不能直接使用。...Linux内核空间虚拟地址分布 ? 在 Kernel Image 下面有 16M 的内核空间用于 DMA 操作。...Linux物理地址和虚拟地址的关系 ? Linux 将 4G 的线性地址空间分为2部分,0~3G 为 user space,3G~4G 为 kernel space。...于是,内核将 0~896M 的物理地址空间一对一映射到自己的线性地址空间中,这样它便可以随时访问 ZONE_DMA 和 ZONE_NORMAL 里的物理页面;此时内核剩下的 128M 线性地址空间不足以完全映射所有的...到这里我们应该知道了 Linux 是如何用虚拟地址来映射物理地址的,最后我们用一张图来总结一下: ?
但是Linux内核并没有把整个1G空间用于线性映射,而只映射了最多896M物理内存,预留了最高端的128M虚拟地址空间给IO设备和其他用途。...所以,当系统物理内存较大时,超过896M的内存区域,内核就无法直接通过线性映射直接访问了。这部分内存被称作high memory。相应的可以映射的低端物理内存称为Low memory。...(4)物理内存<896M时,没有high memory,因为所有的内存都被kernel直接映射了。...这里释放完成后,发现cached数值仍然不为0,原因是free命令计算的cached包含了共享内存的大小,共享内存需要使用ipcrm [ -M key | -m id ]命令来释放。...---- 参考文献 [1]free命令.Linux命令大全 [2]Linux free命令:buffer 与 cache 区别 [3]linux内核的high memory概念详解 [4]Linux
今天这篇给自己解释了一下为什么 Linux veth0/1 + bridge ping 不通。 原因都在 ip route show table local 输出里。...192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 veth1 [dahui@192 ~]$ # 创建一个linux...scope link src 192.168.2.10 [dahui@192 ~]$ Reference: https://unix.stackexchange.com/questions/205708/linux-does-not-reply-to-arp-request-messages-if-requested-ip-address-is-associat
,但是我们也是都知道,这玩意正版是收费的,不仅系统收费,日常的办公软件也都是收费的,说实话这玩意真是一笔不小的费用 当然,也不止这点原因。...何为Linux: Linux,全称GNU/Linux,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。...使用者不仅可以直观地获取该操作系统的实现机制,而且可以根据自身的需要来修改完善Linux,使其最大化地适应用户的需要。 Linux不仅系统性能稳定,而且是开源软件。...在很多企业网络中,为了追求速度和安全,Linux不仅仅是被网络运维人员当作服务器使用,甚至当作网络防火墙,这是Linux的一大亮点。...话说回来,让我下定决心要换Linux系统的根本原因是,开发环境。。。。。环境不兼容问题真的很头疼,一样的代码放本地机器就能跑起来,丢到服务器就炸,换了Linux这烦恼倒是也消失不见了
Linux 允许进程查询内核以获得其父进程的 PID,或者其任何子进程的执行状态。例如,进程可以创建一个子进程来执行特定的任务,然后调用诸如 wait() 这样的一些库函数检查子进程是否终止。...为了遵循这些设计原则,不允许 Linux 内核在进程一终止后就丢弃包含在进程描述符字段中的数据。只有父进程发出了与被终止的进程相关的 wait() 类系统调用之后,才允许这样做。...这就是引入僵死状态的原因:尽管从技术上来说进程已死,但必须保存它的描述符,直到父进程得到通知。
1、查看进程的线程: ps -eLf|egrep 'gateserver|UID' 2、跟踪线程调用: strace -p 15530 3、统计线程中函数的调用...
TCP 四次握手 产生SIGPIPE的原因 SIGPIPE信号产生的原因: 简单来说,就是客户端程序向服务器端程序发送了消息,然后关闭客户端,服务器端返回消息的时候就会收到内核给的SIGPIPE信号
最近遇到某个线上服务进程卡死的情况,但是在本地调试的过程中又没法复现,需要在线上服务器运行一段时间后在某些条件下才会触发。
/kernel/v3.x/linux-3.18.6.tar.xz xz -d linux-3.18.6.tar.xz tar -xvf linux-3.18.6.tar cd linux-3.18.6...重新配置编译Linux使之携带调试信息 在原来配置的基础上,make menuconfig选中如下选项重新配置Linux,使之携带调试信息 kernel hacking—> [*]...因此,内核能映射的内存空间,只有1G大小,但实际上比这个还要小一些,大概是896M,另外128M空间是用来映射高端内存使用的。...因此0到896M的内存空间,就叫做低端内存,而高于896M的内存,就叫高端内存了。...linux_banner变量保存着linux内核的版本号: ?
, stack是固定大小,linux中的段都指向0,主要是page发挥作用。...内核虚拟空间是1G,实际上内核只占用了896M虚拟空间,一一映射那就和物理地址0开始的896M,896M以上的物理地址就叫做high mem,kernel要访问就建立映射到它剩下的128M虚拟空间中,详见函数...为什么是896M?.../kernel/git/torvalds/linux.git/commit/?...如果物理CPU支持pae特性,比较新一点的linux guest和kvm会检测自动把pae利用起来。
896M,剩下的128M为非线性区。...Linux内核高端内存的由来 2.1 为什么需要高端内存? 高端内存是指物理地址大于 896M 的内存。对于这样的内存,无法在“内核直接映射空间”进行映射。...因此,Linux 规定“内核直接映射空间” 最多映射 896M 物理内存。...不能用于大于896M的高端内存。...VMALLOC_RESERVE的大小与体系结构相关,在X86上,VMALLOC_RESERVE定义为128M,这就是为什么ZONE_NORMAL大小通常是16M到896M的原因。
出于几个原因(包括好奇心),几周前我开始使用Xfce作为我的Linux桌面。原因之一是后台守护进程占用了我非常强大的主工作站上所有的CPU和I/O带宽。...推荐Xfce的八个原因 1.轻型建筑 与其他一些台式机(如KDE和GNOME)相比,Xfce占用的内存和CPU使用量非常小。在我的系统中,组成Xfce桌面的程序为如此强大的桌面占用了很小的内存。...在我的新书里,系统管理员的Linux哲学将于今年秋季推出,我将讨论简单性的许多优点,包括简单性是优雅的标志之一这一事实。显然,编写和维护Xfce及其组件应用程序的程序员都非常喜欢简单。...这种简单性很可能是Xfce如此稳定的原因,但它也带来了干净的外观、响应性的界面、易于导航的结构,感觉很自然,以及总体的优雅,使它成为一种使用的乐趣。...我已经了解到,改变到一个新的Linux桌面可能需要一些工作来配置它,我想要的-所有我最喜欢的应用程序启动程序在面板上,我喜欢的壁纸,等等。这些年来,我已经换了很多次新的台式机或旧的台式机的更新。
例如: 当然, 这个样式是可以修改的, 这就涉及到我们的PS1和PS2了, 有经验或者以前有设置过的童鞋估计都不会陌生, 木有接触过的童鞋可以参考一下链接学习下: linux PS1 提示符定义 问题...但是这个原因很快就被否决, 因为当我们在切换用户时, 提示符的$会改变成#, 而且也有其他的例子(下面会举出来)证明, PS1是每次都会执行的. 所以问题只能在于我们写法中....可能这里会有童鞋不清楚linux的单引号和双引号的区别, 简单来说就是: 双引号: 让大部分的符号(例如*), 失去意义,变为普通的字符. 单引号: 让所有的符号, 都失去意义, 变为普通的字符....原因分析 所以我这边失败的原因就是, 我这里需要用的是单引号, 而不是双引号, 因为如果用双引号, PS1在赋值时, 就已经获得命令/函数的值了, 所以每次打印PS1, 都已经是具体的值了, 而不是一个命令...解决方案 找到了原因, 修改起来就得心应手了, 我们只需要将刚才的语法, 从双引号换成单引号即可.
最近项目中出现了一个问题,服务器端程序会突然崩溃退出,我们采取了coredump技术以找到崩溃原因,即确定进程退出时正在执行的函数是哪个,其状态如何。...(关于coredump的开启和对shell的理解,请参考本人另一篇博客《使用dotnet-dump 查找 .net core 3.0 占用CPU 100%的原因解析》,关于gdb请参考《gdb调试命令的使用及总结...———————————————— 总结 以上所述是小编给大家介绍的Linux下利用coredump技术追查进程崩溃原因,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
最近在linux中遇到了个crontab定时任务不执行的case,在这给大家分享一下,避免踩到我遇到的坑。 先贴脚本吧 为了方便展示,把脚本入参,都写死了 #!...jar /opt/script/xxx/vipbg/vip-bg-job-1.0-SNAPSHOT-shaded.jar /opt/script/xxx/vipbg/bg.log 这次执行了,没有执行的原因就是执行
领取专属 10元无门槛券
手把手带您无忧上云