docker-index.exe内存占用大

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker-index.exe内存占用大相关的知识,希望对你有一定的参考价值。

你好,最近用docker部署了个系统,服务器配置是1G的内存,跑了两个容器,一个wbe服务,一个是mysql,使用的过程中发现服务经常挂,一开始因为运行的服务不太重要并且没时间处理就没太在意,每次挂了我就上传restart重启一下镜像。后面找了个时间排查了问题,查看了下docker-compose的日志,发现是因为运行的mysql容器占用内存过高导致的,在此记录下解决过程。

1.排查原因

docker-compose logs
从第1和第2条的error发现是因为mysql容器占用的内存过高,导致mysql挂了(shutdown)

2.解决

上网搜了一下,针对该问题一般的解决方法一般都是

1)进入到容器里修改mysql的配置文件,限制mysql容器的内容占用大小
2)增大服务器的swap
3)也可以在容器启动的时候增加限制内存的参数--innodb-buffer-pool-size=64M,详细百度
结合查询了其他资料,决定使用第一种解决方案。(增大swap治标不治本,而且增大swap是对系统而言的,swap不建议增大太多,扫描类的服务如果不限制容器的内存很容易爆)
过程中主要参数该文章解决原文

步骤如下:

1.docker ps

2.docker exec -it id bash

3.进入/etc/mysql/conf.d目录后,vim docker.cnf文件
首先需要安装vim
apt-get update apt-get install vim
然后vim docker.cnf,编辑后保存退出

最后exit退出容器后,然后docker-compose restart即可

3.优化前后内存占用对比
参考技术A 测试环境下服务器的配置为24核64G内存,启动微服务,在没有进行内存限制的时候,我们通过docker stats命令查看一下微服务的内存占用,如下图

 
 
 

我们发现8个微服务占用了将近24G的内存,最大的一个服务占用了将近8个G的内存,这显然是不合理的
 

我们看一下Dockerfile文件的配置

FROM registry.cn-beijing.aliyuncs.com/sxd/ubuntu-java8:1.0
MAINTAINER helloworld <xxxxx@qq.com>
ADD bin/start.sh /root/
RUN chmod u+x /root/start.sh
CMD ["/root/start.sh","dev -Dcache"]
对应的启动脚本start.sh的配置如下:

#!/bin/bash
#### normal dev model
#nohup java -jar -Dspring.profiles.active=dev $1 target/myservice.jar > out.log $1 2>&1 &
nohup java -jar target/myService.jar -
参考技术B 可以进入到容器里修改mysql的配置文件,限制mysql容器的内容占用大小
2)增大服务器的swap
3)也可以在容器启动的时候增加限制内存的参数--innodb-buffer-pool-size=64M。

php 数组占用内存太大

php 数组占用内存太大
public function getLink($title = false)

$mode = "/<a.*?href='(.*?)'.*?>(.*?)<\/a>|<a.*?href=\"(.*?)\".*?>(.*?)<\/a>|<A.*?HREF='(.*?)'.*?>(.*?)<\/A>|<A.*?HREF=\"(.*?)\".*?>(.*?)<\/A>/i";
preg_match_all($mode, $title, $linkArray);

return $linkArray;


上面函数返回了一个很大数组,导致电脑内存耗光,我想问,要怎么解决正则返回数组内存太大,导致电脑内存耗光的问题

参考技术A 我们这前面的php高效写法提到,尽量不要复制变量,特别是数组,一般来说php数组的内存利用率只有1/10,也就是说,一个在c语言国面100M内存的数组,在php里面就是1G, 参考技术B 内容简介编辑

以上是关于docker-index.exe内存占用大的主要内容,如果未能解决你的问题,请参考以下文章

运行php程序文件占用多大内存

一个Java对象到底占用多大内存

java怎样配置redis占用多大内存

一个Java对象到底占用多大内存

一个Java对象到底占用多大内存

linux系统free查看内存,发现可用物理内存很少,但是查看进程却发现没进程占用大内存