一、网络常用命令
# 查看地址信息
ifconfig
# 测试网络连通性
ping IP
# 测试端口连通性,二选一,没拒绝就说明端口能通
telnet IP PORT
# 测试端口连通性,二选一,没拒绝就说明端口能通
exec 3<>/dev/tcp/119.3.107.170/1433
二、排查docker容器占用过高,宿主机内存处理
使用top查看内存服务器资源情况
在服务器中,通过 top 查看是否有进程的用户态(us)过高,运行状态中输入M
按内存使用率降序排列进程
top
使用ps查看具体进程及启动命令
方法1:通过ps -ef |grep "上面查到的进程号,用于后续查服务用,如果不知道是哪个服务,可以咨询开发
ps -aux | grep 2838
方法2:如果确定pid为docker容器相关的进程,则可以直接使用docker命令,定位容器名称通过pid找到相应的docker容器
docker inspect -f "{{.State.Pid}} {{.Name}}" $(docker ps -q) |grep <PID>
使用docker查看具体服务
这步需要根据jar包名称,查服务,处理。此处由于是docker服务,可以使用docker ps命令查看服务。(如果不确定容器名的别猜,问开发)
docker ps | grep 容器名
方法1:运行中的容器可以使用以下命令缩小容器内存
docker update --memory 1024m --memory-swap 2000m 容器名
# 如果报错的话,则需要先停止容器再修改
docker stop 容器名
方法二: 启动命令中限制内存大小
可以在启动命令中添加-m xxM 参数用来限制容器内存大小,注意该内存应为容器内的系统和业务服务所需内存大小的总和,太小可能会影响使用或者性能,如下所示
docker run -m 1000M --name 容器名 镜像版本
更新容器使用内存
注意: 此处要确定可以缩小容器内存,否则可能影响使用与性能要求
PS: docker 默认没有启用memory-swap交换内存,直接设置了内存会出问题,也就是说宿主 swap 支持使用多少则容器即可使用多少,如果 --memory-swap 设置小于 --memory则设置不生效。
将memory-swap 设置值为 -1,表示容器程序使用内存受限,而 swap 空间使用不受限制。
二、Docker
1、当进容器用命令vi修改容器内的文件时提示vi命令找不到
退出容器
把容器内要改的文件拷出来:docker cp 从容器id:容器内文件地址/所拷贝的文件名 拷贝到/XXX路径
去服务器上拷贝路径改文件
改完再拷进去:docker cp XXX路径/修改的文件 容器id:容器内文件地址/
重启容器
2、启动容器时报错
在创建内外网映射时报错,问了运维同学,他的说法是可能docker 在iptables之前启动导致的这个问题,在创建内外网映射时报错,试着重启了一下docker就解决了
[root@rbtnode1 ~]# docker restart esmc-client
Error response from daemon: Cannot restart container esmc-client: driver failed programming external connectivity on endpoint esmc-client (be0d4ae47d27171335eabab67586d13e1ca66bbc53b8f40cd9ed8675c58b7fa7): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 6067 -j DNAT --to-destination 172.17.0.3:8080 ! -i docker0: iptables: No chain/target/match by that name.
# 重启docker
systemctl daemon-reload
systemctl restart docker