Linux内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽,内核会把该进程杀掉,监控是正常的...防止重要的系统进程触发(OOM)机制而被杀死:可以设置参数/proc/PID/oom_adj为-17,临时关闭linux内核的OOM机制。...保护某个进程不被内核杀掉可以这样操作: echo -17 > /proc/$PID(进程的PID)/oom_adj 或者通过修改内核参数禁止OOM机制 sysctl -w vm.panic_on_oom...=1 vm.panic_on_oom = 1 //1表示关闭,默认为0表示开启OOM sysctl -p End
OOM分析 oom_killer(out of memory killer)是Linux内核的一种内存管理机制,在系统可用内存较少的情况下,内核为保证系统还能够继续运行下去,会选择杀掉一些进程释放掉一些内存...函数解析: oom_killer的处理主要集中在mm/oom_kill.c。...check_panic_on_oom检查系统管理员的态度,看oom时是进行oom killer还是直接panic掉,如果进行oom killer,则进入下一步; 如果系统管理员规定,谁引起oom,杀掉谁...oom_score_adj,因此系统管理时建议设置/proc//oom_score_adj,内核依然保持oom_adj设置以兼容旧版本,系统中对oom_score_adj或oom_adj中任一个进行设置...= (oom_adj*1000)/17 oom_adj=(oom_score_adj*17)/1000 当设置oom_adj=-16时,oom_score_adj自动调整为-941 当设置oom_score_adj
Linux开发一般会遇到“/proc/sys/vm/overcommit_memory”,即文件/etc/sysctl.conf中的vm.overcommit_memory,Overcommit的意思如同其字面意思...overcommit_memory有三种取值(注:overcommit_memory并不控制OOM,是否开启OOM由panic_on_oom控制): overcommit_memory取值 含义 0...系统是否行使OOM,由/proc/sys/vm/panic_on_oom的值决定,当/proc/sys/vm/panic_on_oom取值为1时表示关闭OOM,取值0时表示启用OOM。...如果将/proc/sys/vm/oom_kill_allocating_task的值设置为1,则OOM时直接KILL当前正在申请内存的进程,否则OOM根据进程的oom_adj和oom_score来决定。...oom_adj表示进程被OOM KILLER杀死的权重,取值“17~15”,值越大被KILL的概率越高,当进程的oom_adj值为-17时,表示永远不会被OOM KILLER选中。
基本概念 Linux 内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程杀掉...oom killer机制分析 oom killer是计算出选择哪个进程kill呢?.../proc/[pid]/oom_score,当前该pid进程的被kill的分数,越高的分数意味着越可能被kill,这个数值是根据oom_adj运算后的结果,是oom_killer的主要参考。...sysctl 下有2个可配置选项: vm.panic_on_oom = 0 #内存不够时内核是否直接panic vm.oom_kill_allocating_task = 1 #oom-killer是否选择当前正在申请内存的进程进行...killer选中的概率,禁止或者给oom_adj最小或偏小的值,也可以通过sysctl调节oom killer行为 如何查看OOM日志 grep "Out of memory" /var/log/messages
本文将聚焦于 Linux 内存结构、内存分析以及 OOM killer 等 3 个方面以及笔者多年的实践经验总结进行“吹牛逼”,当然,若吹的不好,欢迎大家扔砖、鸡蛋。...OOM,全称为 “Out Of Memory”,即 内存溢出。OOM Killer 是 Linux 自我保护的方式,防止内存不足时出现严重问题。...通常,系统内核检测到系统内存不足时,筛选并终止某个进程的过程可以参考内核源代码:linux/mm/oom_kill.c,当系统内存不足的时候,out_of_memory()被触发,然后调用 select_bad_process...Linux 操作系统选择”bad”进程是通过调用 oom_badness(),挑选的算法和想法都很简单很朴实:最 bad 的那个进程就是那个最占用内存的进程。...综上所述,本篇文章主要通过基于对 Linux 内存结构、分析及 OOM Killer 3个核心维度,从主动及被动场景等 2 方面对 Linux 操作系统内存的剖析,以探讨在实际的业务场景中,内存表现的相关活动及经验认知
原文:http://blog.csdn.net/guomsh/article/details/6536915 Linux有一个特性:OOM Killer,一个保护机制,用于避免在内存不足的时候不至于出现严重问题...在很多情况下,经常会看到还有剩余内存时,oom-killer依旧把进程杀死了,现象是在/var/log/messages日志文件中有如下信息: Out of Memory: Killed process...在32位CPU下寻址范围是有限的,Linux内核定义了下面三个区域: # DMA: 0x00000000 - 0x00999999 (0 - 16 MB) # LowMem: 0x01000000...p=430 http://www.dbanotes.net/database/linux_outofmemory_oom_killer.html http://www.sealinger.com/archives...一开始由于系统配置是2G,而且没有交换分区,所以每天导致out of memory,后来增加了物理内存,并做了交换分区,情况有所改善,但是运行2-3天后还是会出现out of memory的情况,后来分析日志文件
当系统内存不足时,Linux内核会触发OOM来选择一些进程kill掉,以便能回收一些内存,尽量继续保持系统继续运行。...具体选择哪个进程杀掉,这有一套算分的策略,参考因子是进程占用的内存数,进程页表占用的内存数等,oom_score_adj的值越小,进程得分越少,也就越难被杀掉,oom_score_adj的取值为[-1000,1000...= -1UL) {//kill 掉被选中得分最高的进程 oom_kill_process(p, gfp_mask, order, points, totalpages,...break; }; //计算进程oom score adj分值 points = oom_badness...+ (oom_score_adj * (total_pages/1000) ) //若point为负值,则此处返回1 points = points > 0 ?
应用程序日志中没有错误,没有警告,也没有任何可疑的信息。 我们部署的监控系统发现进程已经挂掉了并重启了服务。由于现在咖啡因已经流淌在我的血液中了,我开始变得信心十足。...果然在30分钟后,我在/var/log/kern.log日志中发现了下面的信息: Jun 4 07:41:59 plumbr kernel: [70667120.897649] Out of memory...所有的现代Linux内核中都会有一个内存不足终结者(Out of memory Killer, OOM Killer)的内建机制,在内存过低的情况下,它会杀掉你的进程。...你可以在Linux下编译并运行下面这个代码片段(我是在最新的稳定版Ubuntu上运行的)。...还有别的一些方法比如OOM killer的调优,或者将负载水平分布到数个小的实例上,又或者减少应用程序的内存占用量。
只不过对于空白行不编号 -s 或 –squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行 -v 或 –show-nonprinting 2、more命令: 以百分比的形式查看日志...注意: 最后一条命令非常有用,尤其在监控日志文件时,可以在屏幕上一直显示新增的日志信息。
和-XX:HeapDumpPath参数分别用于指定发生OOM是否要导出堆以及导出堆的文件路径 该命令一执行,立即就会发生OOM,并打印如下的日志: fenglibin@fenglibin-HP:~/eclipse_neon_workspace.../oom.out HeapMemUseTest java.lang.OutOfMemoryError: Java heap space Dumping heap to ./oom.out ......文件已经生成了,该文件就是应用在发生OOM异常时自动导出的堆文件。...那我们此时需要对该文件进行分析,因为其中记录了是什么对象导出了应用程OOM的发生。...分析OOM的工具推荐使用MAT,在配置好Java环境的电脑中,直接打开即可,不需要安装,然后通过MAT打开已经生成的OOM文件oom.out,出现如下提示,选择“Leak Suspects Report
linux查看日志文件内容命令tail、cat、tac、head、echo tail -f test.log 你会看到屏幕不断有内容被打印出来....这时候中断第一个进程Ctrl-C, ————————— linux 如何显示一个文件的某几行(中间几行) 从第3000行开始,显示1000行。...—————————————— 在Linux中echo命令用来在标准输出上显示一段字符,比如: echo “the echo command test!”
linux存在很好的日志机制,大到系统,小到应用都可以记录日志。 为什么需要日志循环 操作系统(Windows,Unix),应用一般都会记录日志,方便使用者常看系统或应用使用情况,或者排查故障。...单纯的记录日志不加干预,日志不断累积,时间长了,磁盘空间就被占满了。 所以,在linux中,日志一般会按一定的规则进行循环,保证日志量控制在一定的范围内。...日志循环的方法 日志循环的原理一般是:在特定的时间点,或日志达到一定大小,就触发循环脚本。 循环脚本通过新增新日志,备份老日志,调度应用重新加载配置(重新写日志)达到日志循环的目的。...}` 该方法通过mv+kill的方式进行日志循环,因为linux中,日志打开底层原理是通过inode信息寻址找到对应的block进行内容读取,mv操作不改变文件的inode值。...2. logrotate循环 logrotate是一个日志循环的工具,linux内置的syslog也是使用它进行日志循环。
我们用的常见的思路 1.直接删除日志文件 2.删除我们自己 ip 的日志内容 3.rm -rf / 如果直接删除文件,那么管理员也会从别的地方下手.或者恢复文件之类的....当然.我还是建议使用 python 完成这项工作..当日志超过10w 或者100w 级以上的数量 . bash 的执行速度就会显得极其鸡肋.
为了让 管理者可以随时监控服务所产生的信息,Linux 提供了一个日志服务,该服务可以收集(Collect)任何服务传递过来的信息,储存成为记录文件(Log File) 、或直接传送给某些用户,甚至也可以传送到其他计算机的系统日志服务...日志的作用 系统方面的问题 linux系统长时间运行,可能会出现一些软件,硬件方面的问题,这些问题都会记录到日志文件中,我们可以通过查看相应的日志文件,找出问题所在 网络服务的问题 网络服务在运行过程中产生的信息都会记录到日志文件中...所以linux系统提供了一个日志切割工具,这个工具就是logrotate,用户可以用过这个工具对日志文件进行切割,系统也利用这个工具配合计划任务服务,定期的对系统日志进行切割。...现在linux系统采用systemd来管理系统服务,而systemd又是第一个启动的服务,所以现在我们通过一个systemd自带的,名字叫systemd-journald的服务来协助记录日志信息。...虽然我们有相关的工具来查看日志信息,但是如果信息量过大的话查看起来也是比较费时的,所以linux系统给我们提供了一个日志分析工具,这个工具叫logwatch,它会每天分析日志信息,并将信息通过邮件的形式发送给
# Linux 日志管理 # 基本介绍 日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。...原理示意图 查询Linux中的rsysloged服务是否启动 ps aux | grep "rsyslog" / grep -v "grep" 查询rsyslogd服务的自启动状态 systemctl...sshd服务相关事件),该文件会接收到信息并保存.给小伙伴演示重启,登录的情况,看看是否有日志保存 # 日志轮替 # 基本介绍 日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后...这样日志文件名不会重叠,也就不需要日志文件的改名,只需要指定保存日志个数,删除多余的日志文件即可。 如果配置文件中没有“dateext”参数,日志文件就需要进行改名了。...missingok 如果日志不存在,则忽略该日志的警告信息 notifempty 如果日志为空文件,则不进行日志轮替 minsize 大小 日志轮替的最小值。
22 192.168.1.88:53505 ESTABLISHED 5923/sshd: root@pts (3)历史ssh 隐匿登录行为通过分析/var/log/secure 日志...(有的系统是/var/log/auth.log) #通过分析/var/log/secure 日志有的系统是/var/log/auth.log 从 Accepted publickey for root
linux 软件 syslog syslog-ng(next generation) 日志系统:syslog 负责统一记录日志 syslog服务: syslogd:系统,非内核产生的信息。...klogd:内核,专门负责记录内核产生的日志信息。...:日志切割 messge -->message1--->message2 日志轮转条件 /var/log/messages:系统标准错误日志信息。.../var/log/secure:系统认证,安全日志。...chkconfig --list rsyslog servcie rsyslog status 配置文件 信息的详细程度:日志级别 定义不同日志信息 子系统:facility:设施 动作:action
joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/291 常用命令 find、grep 、egrep、awk、sed Linux...中常见日志以及位置 /var/log/cron 记录了系统定时任务相关的日志 /var/log/auth.log 记录验证和授权方面的信息 /var/log/secure 同上,只是系统不同 /var...log/auth.log、/var/log/secure记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中...IP有哪些 grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more //登录成功的日志
基本介绍日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除2....这样日志文件名不会重叠,也就不需要日志文件的改名, 只需要指定保存日志个数,删除多余的日志文件即可。3) 如果配置文件中没有“dateext”参数,日志文件就需要进行改名了。...当第一次进行日志轮替时,当前的“secure”日志会自动改名为“secure.1”,然后新建“secure”日志, 用来保存新的日志。...missingok 如果日志不存在,则忽略该日志的警告信息notifempty 如果日志为空文件,则不进行日志轮替minsize 大小 日志轮替的最小值。...日志轮替机制原理日志轮替之所以可以在指定的时间备份日志,是依赖系统定时任务。
Linux 常见的登录日志文件 登录文件可以帮助我们了解很多系统重要的事件,包括登入者的部分信息,因此登录文件的权限通常是设定为仅有 root 能够读取而已。...CentOS 7.x 使用 systemd 提供的 journalctl 日志管理 CentOS 7 除了保有既有的 rsyslog.service 之外,其实最上游还使用了 systemd 自己的登录文件日志管理功能喔...18.2 rsyslog.service:记录登录文件的服务 上一小节提到说 Linux 的登录档主要是由 rsyslog.service 在负责,那么你的 Linux 是否有启动 rsyslog 呢?...我们将上面的数据简单的分为三部分来说明: 服务名称 rsyslogd 主要还是透过 Linux 核心提供的 syslog 相关规范来设定数据的分类的,Linux 的 syslog 本身有规范一些服务讯息...此外,未来在 /run/log 底下就没有相关的日志可以观察了!因为移动到 /var/log/journal 底下来!
领取专属 10元无门槛券
手把手带您无忧上云