如何解决java.lang.OutOfMemoryError

PermGen space是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。主要原因是class文件太多或者lib下的jar文件太多

linux系统:

在tomcat的bin目录下找到catalina.sh

找到echo "Using CATALINA_BASE:   $CATALINA_BASE"这一行

在上面加入

JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=256m"

如果是windows

修改TOMCAT_HOME/bin/catalina.bat文件,在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:

     set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m

rpm安装mysql5.7

1.下载安装包

下载地址:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar

上传到 /home 目录下

解压安装包

 tar -xf mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar -C /home/mysql/

查询并卸载系统自带的Mariadb

rpm -qa | grep mariadb

rpm -e –nodeps 文件名

查询并卸载系统老旧版本的Mysql

rpm -qa | grep mysql

rpm -e –nodeps 文件名

安装libaio环境(已经存在不需要)

yum install libaio

2.执行Rpm包安装(按顺序)

rpm -ivh mysql-community-common-5.7.27-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-5.7.27-1.el7.x86_64.rpm

rpm -ivh mysql-community-devel-5.7.27-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-compat-5.7.27-1.el7.x86_64.rpm

rpm -ivh mysql-community-client-5.7.27-1.el7.x86_64.rpm

rpm -ivh mysql-community-server-5.7.27-1.el7.x86_64.rpm

3.启动mysql服务

查看mysql服务是否启动

service mysqld status

启动服务:

systemctl start mysqld

3.重置root密码

查看随机生成的密码

grep 'temporary password' /var/log/mysqld.log

修改root用户密码

mysql -u root -p

mysql> Enter password: (输入刚才查询到的随机密码)

mysql> SET PASSWORD FOR 'root'@'localhost'= "新密码";

4.开放外部网段访问3306端口

mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Jstw@123' WITH GRANT OPTION;

mysql>FLUSH PRIVILEGES;

mysql> exit

5.这里设置开机自启动

方法一   、vi /etc/rc.local       添加service mysqld start

方法二  、 执行 systemctl enable mysqld.service   

(# 注意systemctl 中规定、服务的配置文件要以.service 为后缀

开启防火墙mysql 3306端口的外部访问

firewall-cmd –zone=public –add-port=3306/tcp –permanent

firewall-cmd –reload

查看已开启的端口

firewall-cmd –list-all

netstat -ntpl (TCP类型已开放的端口)

隐藏tomcat中执行versiosn命令的tomcat版本

1.tomcat/lib/目录

下载catalina.jar文件到本地,修改后缀为.zip文件然后解压,解压之后找到Serverinfo.properties文件中的以下参数(修改以掩饰真实版本信息):

    server.info=X

    server.built=BuildDate

server.number=X

2.修改完成后,打包为catalina.zip,然后修改zip后缀为jar, 上传到/tomcat/lib/目录即可.再次执行bin目录下的version.sh查看版本,已经被隐藏.

隐藏tomcat版本号

修改过两个地方:

1.     第一处:

找到conf下面的server.xml文件添加:server=”Microsoft-IIS/8.0”

1.png

添加

server=”Microsoft-IIS/8.0”

2.png

结果:

3.png

2.     第二处修改地方:

隐藏404页面中的版本号

cd /data/cupid_cl/webserver/lib

mkdir -p org/apache/catalina/util

vi ServerInfo.properties

server.info=Apache Tomcat Version X

/etc/init.d/cupid_cl stop

/etc/init.d/cupid_cl start

4.png

结果:

5.png

windows server 2012 安装vc++2015失败

直接上图:

1.png

可以查看到错误原因在windows8.1-KB2999226-x64.msu  进入到这个目录下,后缀名修改为.cab ,并解压。

用管理员运行cmd,执行命dism /online /add-package /packagepath:"刚才解压目录" 

执行成功后,重启系统 在尝试安装vc++成功安装

2.png

在线安装docker

Docker要求:

lunix内核,要求3.8以上

centos7

Docker是一个进程,一启动就两个进程,一个服务,一个守护进程。占用资源就非常少,启动速度非常快,1s。

一台机器上vm,3到10个实例。docker 100到10000。

1.核心概念:

1)镜像images,事先做好一些基础功能(软件),可以在镜像上在来安装新的内容。

2)容器container

3)数据卷volume,把数据映射到linux磁盘目录,业务把数据写入这个目录,容器重新启动时,自己加载数据卷,数据又恢复了。有问题的。(争论,数据库这种方式需求适不适合docker)

4)仓库repository,maven仓库概念一样

1.1.1.1第一步:安装工具包 

yum install -y yum-utils device-mapper-persistent-data lvm2   #安装工具包,缺少这些依赖将无法完成

1.1.1.2第二步:设置远程仓库

   yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo

  或者:

  yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1.1.1.3第三步:安装    yum install docker-ce

1.1.1.4第四步:启动  systemctl start docker

1.1.1.5第五步:    查看版本    docker version

1.1.1.6第六步:校验      docker run hello-world

1.1.2查看Docker版本

     docker –help #帮助

     docker –v #简单查看版本

     docker version #查看版本

     docker info #查看信息

1.1.3安装其它产品的两种方式

      docker安装其它产品有两种方式

      方式一:通过拉取事先做好的镜像,例如下面redis的安装方式

      方式二:通过Dockerfile来构建新的镜像,例如下面tomcat的安装方式

1.1.4 docker的其它命令

    # docker attach vm1              连接容器

    # docker top vm1                 查看容器中运行的进程信息

    # docker logs vm1                查看容器指令输出 -f 参数可以实时查看

    # docker stats vm1               查看容器资源使用率

    # docker diff vm1                查看容器修改

    # docker run -d –name vm1 ubuntu bash -c "while true; do echo westos; sleep 1; done"   运行容器时执行命令

    # docker stop vm1                停止容器

    # docker start vm1               启动容器

    # docker kill vm1                强制干掉容器

    # docker restart vm1             重启容器

    # docker pause/unpause vm1       暂停/恢复容器

    # docker rm vm1                  删除容器

    # docker export vm1 > vm1.tar    导出容器

    # docker import vm1.tar image    导入容器为镜像 image

    # docker container prune         删除所有停止的容器

    # docker load -i rhel7.tar       导入镜像

1.1.4.1  示例安装tomcat

    方法一 

    # docker search tomcat      查找Docker Hub上的tomcat镜像

    # docker pull tomcat      取官方的镜像

    # docker images|grep tomcat    下载完成后可以在本地镜像列表里查到REPOSITORY为tomcat的镜像

    方法二

         略

1.1.5  使用容器

1.1.5.1运行容器:

docker run –name tomcat -p 8080:8080 -v $PWD/test:/usr/local/tomcat/webapps/test -d tomcat

命令说明:

     -p 8080:8080:将容器的8080端口映射到主机的8080端口

      -v $PWD/test:/usr/local/tomcat/webapps/test:将主机中当前目录下的test挂载到容器的/test

1.1.5.2 查看容器启动情况

    #docker ps

1.1.6通过浏览器访问

    http://ip:8080

1.2.1 示列 使用nginx

    docker search nginx

    docker pull tomcat

    docker run –name nginx-test -p 8081:80 -d nginx

           nginx-test 容器名称。

           the -d设置容器在在后台一直运行。

           the -p 端口进行映射,将本地 8081 端口映射到容器内部的 80 端口。 执行以上命令会生成一串字符串,类似 c1236c299ce448dbe35bb7003675be0008bd463b3c29e8ed59bc9c701f91bd83,这个表示容器的 ID,一般可作为日志的文件名。

          我们可以使用 docker ps 命令查看容器是否有在运行:

   浏览器中打开 http://127.0.0.1:8081/

2.上传下载文件

Docker容器向宿主机传送文件

格式:

docker cp container_id:<docker容器内的路径> <本地保存文件的路径>

比如:

cp 1cc872df486e:/usr/local/tomcat/test.war  /home/

宿主机向Docker容器传送文件

格式:

docker cp 本地文件的路径 container_id:<docker容器内的路径>

比如:

docker cp /home/test.war  1cc872df486e:/usr/local/tomcat

Docker镜像源修改

docker默认的源为国外官方源,下载速度较慢,可改为国内,加速

方案一

修改或新增 /etc/docker/daemon.json

# vi /etc/docker/daemon.json

{

"registry-mirrors": ["http://hub-mirror.c.163.com"]

}

systemctl restart docker.service

方案二

修改或新增 /etc/sysconfig/docker,在OPTIONS变量后追加参数  –registry-mirror=https://docker.mirrors.ustc.edu.cn

# vi /etc/sysconfig/docker

OPTIONS='–selinux-enabled –log-driver=journald –registry-mirror=https://docker.mirrors.ustc.edu.cn'

Docker国内源说明:

Docker 官方中国区

https://registry.docker-cn.com

网易

http://hub-mirror.c.163.com

中国科技大学

https://docker.mirrors.ustc.edu.cn

阿里云

https://pee6w651.mirror.aliyuncs.com

docker下开启mysql的binlog日志

 1.检查容器状态

[root@localhost ~]# docker ps

 执行这个命令可以看到所有正在运行当中的容器,如果加上-a参数,就可以看到所有的容器包括停止的。

 image.png

 我们可以看到容器正在运行当中,本机映射端口为3306->3306

 如果没有运行docker或者容器则

 systemctl start docker

 docker start 7c5cb1505ea7

2.进入容器

[root@localhost ~]# docker exec -it 7c5cb1505ea7 /bin/bash

执行这个命令可以进入正在启动的容器内部,需要加上容器的id。

-i :即使没有附加也保持STDIN 打开

-t :分配一个伪终端

 image.png

查看一下容器内部的目录结构,我们发现和一个普通的linux系统的目录基本一致

 image.png

3、登录mysql并进行操作

root@7c5cb1505ea7:/# mysql -uroot -p

输入命令,并输入mysql数据库密码

 image.png

4、查看是否开启binlog日志

mysql> show variables like 'log_bin';

在这里我已经开启过了值为ON则表示已经开启,OFF则没有开启

5.编辑配置文件开启binlog

root@7c5cb1505ea7:/etc/mysql# vi my.cnf

 image.png

添加开启binlog配置,保存退出:

 image.png

这一个参数的作用是mysql会根据这个配置自动设置log_bin为on状态,自动设置log_bin_index文件为你指定的文件名后跟.index

第二个参数 ,用的如果是5.7及以上版本的话,重启mysql服务会报错,这个时候我们必须还要指定这样一个参数,随机指定一个不能和其他集群中机器重名的字符串,如果只有一台机器,那就可以随便指定了

按ctrl+D退出容器(或者exit命令)

6、重启mysql容器:

[root@localhost ~]# docker restart 7c5cb1505ea7

image.png

7、查看容器是否启动成功

[root@localhost ~]# docker ps

可以看到容器启动成功。

 image.png

8、进入容器查看binlog是否开启

查看是否开启binlog:

可以看到binlog已经开启。

  image.png

9.一些特殊情况的处理

如果我们改错配置文件,导致容器启动不起来,我们想把配置文件改回来怎么办呢?

首先我们根据docker去查看错误日志,后面加上容器的id。

我们可以根据查询到的日志结果找出错误的原因。

之后在根目录下搜索这个文件:

[root@localhost ~]# find / -name my.cnf

我们可以根据找到的文件进行修改,之后再重新启动容器。

image.png

10.备份mysql容器中的数据库

 image.png