• 运维笔记(一)


    运维笔记(一)

    标签: 运维 linux 内存溢出

    背景描述:

    ​ 网站试用过程中有时出现突然卡主,过1、2分钟才有反应的情况,一开始没有在意,以为是测试人员的网络问题(疫情期间都在家办公)。后来这个问题每天都会出现,我意识到这其中必然存在某个bug,必须找出来并解决。

    ​ 项目部署了多个实例,使用nginx做代理,nginx120s没有响应就自动切换了服务,所以才会出现卡住一段时间后又能正常使用的情形。经过一段时间查询,发现一台web服务器的日志总是会终止在某一时间,判断该服务每天运行一段时间后会自动停止。

    ​ 而这台服务器上部署了另外一个一模一样的服务,那个服务不停说明代码没有问题。问题应该出现在服务器上。后来在网上搜索了一下,尝试检查一下内存。果然,问题出在了内存溢出,系统自动关闭了其中一个服务。

    ​ 一开始想把两个服务设为守护进程,防止系统关闭。但是仔细考虑了下,不找出内存溢出的真正原因,无法解决问题。在一番研究之后,发现了原因所在:我写的自动关闭所有tomcat服务的脚本运行出现了问题,tomcat没有正确关闭,而重启又会开启新的进程,这样经过多次部署后,服务器上就多了6个无用的tomcat进程消耗系统资源。把它们关掉之后,问题解决。

    ​ 现在正在研究脚本为什么没有正确关闭tomcat,暂且先记下积累的运维经验。

    1.查看系统日志

    • 打开/var/log/messages文件 这个为linux系统日志文件
    Dec  7 21:02:45 iZrj97s23bov6rewm9af7aZ kernel: Out of memory: Kill process 22692 (java) score 230 or sacrifice child
    Dec  7 21:02:45 iZrj97s23bov6rewm9af7aZ kernel: Killed process 22692 (java) total-vm:2676800kB, anon-rss:445468kB, file-rss:0kB, shmem-rss:0kB
    

    看见这个记录就明白了内存溢出,服务挂了。

    2.查看内存

    free -mh 查看内存

    jmap -histo pid查询指定java进程的所有对象使用内存情况

    jstack pid |grep tid -A 30 查看该线程堆栈信息

    3.top

    top命令执行结果的前五行为系统整体的统计信息,代表含义如下:

    第1行:系统时间、运行时间、登陆终端数、系统负载(分别为1分钟、5分钟、15分钟内的平均值)

    第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。

    第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比。

    第4行:物理内存总量、空闲内存总量、内存使用量、作为内核缓存的内存量。

    第5行:虚拟内存总量、空闲虚拟内存总量、虚拟内存使用量、①被提前加载的内存量。

    top -p pid 查看指定pid进程

    4. ps -aux --sort -pmem | less

    查看进程,按试用内存排序

    5.ps -ef|grep java

    搜索

    6.硬盘

    df -hl 查看磁盘剩余空间

    df -h 查看每个根路径的分区大小

    du -sh [目录名] 返回该目录的大小

    du -sm [文件夹] 返回该文件夹总M数

    du -h [目录名] 查看指定文件夹下的所有文件大小(包含子文件夹)

    查看硬盘的分区 #sudo fdisk -l

    查看IDE硬盘信息 #sudo hdparm -i /dev/hda

    查看STAT硬盘信息 #sudo hdparm -I /dev/sda 或 #sudo apt-get install blktool #sudo blktool /dev/sda id

    查看硬盘剩余空间 #df -h #df -H

    查看目录占用空间 #du -hs 目录名

    优盘没法卸载 #sync fuser -km /media/usbdisk

  • 相关阅读:
    Django自带的用户认证auth模块
    Django logging模块
    python之MRO和垃圾回收机制
    Django内置form表单和ajax制作注册页面
    自定义登录验证的中间件
    中间件控制访问评率
    多表查询
    单表查询
    同一服务器部署多个tomcat时的端口号修改详情
    反射获取类中的属性和set属性
  • 原文地址:https://www.cnblogs.com/cxy2016/p/12600410.html
Copyright © 2020-2023  润新知