CentOS查看内存占用情况

分类:CentOS教程 阅读:4200 次

背景

上次安装好MySQL之后, 这些天安装了tomcat+nginx, 放了两个小网站跑了. 接着又git+jenkins的持续集成, 把github上的代码可以在jenkins里面自动发布.
现在部署的应用需要连接数据库了, 发现启动MySQL的时候报错了:

> service mysqld start MySQL Daemon failed to start. Starting mysqld: [FAILED]

没有任何信息, 找到MySQL的日志文件, 在/var/log/mysqld.log,打开看到报错信息:

151128 13:57:05 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql 2015-11-28T05:57:05.845716Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp serve r option (see documentation for more details). 2015-11-28T05:57:05.846259Z 0 [Note] /usr/sbin/mysqld (mysqld 5.7.9) starting as process 2441 ... 2015-11-28T05:57:05.850492Z 0 [Note] InnoDB: PUNCH HOLE support available 2015-11-28T05:57:05.850515Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins 2015-11-28T05:57:05.850521Z 0 [Note] InnoDB: Uses event mutexes 2015-11-28T05:57:05.850529Z 0 [Note] InnoDB: GCC builtin __sync_synchronize() is used for memory barrier 2015-11-28T05:57:05.850534Z 0 [Note] InnoDB: Compressed tables use zlib 1.2.3 2015-11-28T05:57:05.850539Z 0 [Note] InnoDB: Using Linux native AIO 2015-11-28T05:57:05.850820Z 0 [Note] InnoDB: Number of pools: 1 2015-11-28T05:57:05.850936Z 0 [Note] InnoDB: Using CPU crc32 instructions 2015-11-28T05:57:05.858460Z 0 [Note] InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M 2015-11-28T05:57:05.858517Z 0 [ERROR] InnoDB: mmap(137428992 bytes) failed; errno 12 2015-11-28T05:57:05.858531Z 0 [ERROR] InnoDB: Cannot allocate memory for the buffer pool 2015-11-28T05:57:05.858547Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error 2015-11-28T05:57:05.858558Z 0 [ERROR] Plugin 'InnoDB' init function returned error. 2015-11-28T05:57:05.858563Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 2015-11-28T05:57:05.858569Z 0 [ERROR] Failed to initialize plugins. 2015-11-28T05:57:05.858575Z 0 [ERROR] Aborting 2015-11-28T05:57:05.858585Z 0 [Note] Binlog end 2015-11-28T05:57:05.858641Z 0 [Note] Shutting down plugin 'CSV' 2015-11-28T05:57:05.858652Z 0 [Note] Shutting down plugin 'MyISAM' 2015-11-28T05:57:05.859081Z 0 [Note] /usr/sbin/mysqld: Shutdown complete 151128 13:57:05 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

可以使用下面命令查看内存占用情况:

free查看总内存占用情况

top查看进程相关的CPU,内存占用情况

简单介绍下top命令: 第一行: 系统当前时刻, 系统运行时间, 当前登陆系统的用户数量, load average为当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数.一般的可以认为这个数值超过 CPU 数目时,CPU 将比较吃力的负载当前系统所包含的进程;

第二行: total, 为当前系统进程总数; running, 为当前运行中的进程数; sleeping, 为当前处于等待状态中的进程数; stoped, 为被停止的系统进程数; zombie, 为被复原的进程数;

第三行Cpu(s): 分别表示了 CPU 当前的使用率;

第四行Mem: 分别表示了内存总量、当前使用量、空闲内存量、以及缓冲使用中的内存量;

第五行Swap: 表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。

执行top命令后的可进行的操作: P - 以 CPU 占用率大小的顺序排列进程列表 M - 以内存占用率大小的顺序排列进程列表 N - 以 PID 的大小的顺序排列表示进程列表 l - 关闭或开启第一部分第一行 top 信息的表示 t - 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示 m - 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示 n - 设置在进程列表所显示进程的数量 s - 改变画面更新周期 h - 显示帮助 q - 退出 top

pmap命令查看详细进程的内存占用情况

可以根据进程查看进程相关信息占用的内存情况,如下所示: > pmap -d pid

后记

找到原来是jenkins占用了较大的内存,把它停掉,重新启动mysql成功.

jenkins1.639只安装了github plugins后, 有一个maven的项目, 在什么操作的不进行的情况下, 内存占用到400+M, 我还以为是不是有问题,. 后来查询到官方建议jenkins服务器建议使用1G以上内存