Docker容器的一些常见用法 作者: lovingyu_er 时间: 2020-08-19 23:30:35 分类: 编程语言,Linux性能优化 评论 ####Docker 磁盘相关命令: #####1. Docker system 命令 ```docker system```命令,它用于管理磁盘的空间的命令 ###### 1.1 docker system df 命令 ,类似于linux上的df命令,数据返回如下: ``` docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 55 31 3.307GB 3.004GB (90%) Containers 44 1 75.01MB 75MB (99%) Local Volumes 0 0 0B 0B Build Cache 0 0 0B 0B ``` 可以看到Docker的镜像共占用了3.307G的数据,容器占用了**75.01MB**的磁盘空间,**Local Volumes** 数据卷没有占用空间 清理命令: ``` 1. docker system prune -a :将没有在使用的Docker镜像删除掉,会把暂时关闭的容器,以及暂时没有用到的Docker都彻底清理掉。 2. docker system prune :用于清理磁盘,删除关闭的容器,无用的数据卷和网络,以及没有tag的镜像。 ``` #####2. Docker 挂载目录 ``` --mount :本地文件|目录不存在,docker会创建 -v :本地文件|目录不存在,docker会自动创建 ``` 关于```--mount```和```-v```参数的详细介绍,请参考:```https://docs.docker.com/storage/bind-mounts/```官方文档 #####3. docker遇到的问题: 3.1 **```OCI runtime exec failed: exec failed: container_linux.go:349: starting container process caused "exec: \"bash\": executable file not found in $PATH": unknown```** 解决方案:可能是你的镜像是mini版本,需要换一个有/bin/bash的镜像。我就是重新换了一个。 #####4. docker容器内操作: 4.1 如何进入某个容器? 解决方案: ```docker exec -it 容器ID/容器名称 bash ``` ####Docker常用的一些基本命令 #####1. 查看容器的镜像: ``` docker images ``` 案例: ``` darrykigerdeMBP:shop darry$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE netmanager latest 9cf1964455ea 11 hours ago 893MB c8f5b50df388 11 hours ago 892MB 9e4890016346 12 hours ago 892MB 1ba64f70cbd7 12 hours ago 14.4MB golang latest 75605a415539 7 days ago 839MB ``` 可以看到案例输出的结果总共有5列: 第一列:images名称, 第二列:标签 第三列:镜像的ID 第四列:镜像的创建时间 第五列:镜像的大小 #####2. 容器的状态 ``` docker ps doker ps -a ``` 前者是查看正在运行的容器镜像 ,```-a```查看所有的容器 #####3. docker build 命令,根据一个```Dockerfile```或者```dockerfile```文件构建一个容器 ``` darrykigerdeMBP:netmanager darry$ pwd /Users/darry/go/src/netmanager darrykigerdeMBP:netmanager darry$ docker build . -t netmanager ``` 该命令会在当前目录```.```中查找```Dockerfile```文件,并构建一个镜像。 其中```-t```参数,指定构建好的仓库的镜像名称。 #####4. docker run 命令,在一个新的容器中运行命令行 案例: ``` docker run -u root -p 8080:8080 netmanager --mount type=bind,source=/Users/darry/go/src/netmanager/Storage/,target=/build/Storage/ ``` 其中: ```-u```:指定容器运行的用户名 ```-p```:容器内部到宿主机的端口映射 ```netmanager``` 是上述```build```好的镜像 ```--mount```:将宿主机source的文件目录挂载到容器中的目录target ,详细的使用方式,可以参考上述的的```-v``` 和```--mount```参数介绍部分的文档。
Ubuntu dmesg显示可读时间 作者: lovingyu_er 时间: 2020-06-10 10:29:23 分类: 技术品鉴,Linux性能优化 评论 Ubuntu系统下,默认的dmesg日志是看不到里面日志的记录时间的,比如: ``` [7292916.369702] [26208] 0 26208 1127 19 8 3 0 0 sh [7292916.369703] [26209] 0 26209 1127 19 7 3 0 0 sh [7292916.369704] [26210] 0 26210 8906 70 24 3 0 0 sudo [7292916.369705] [26211] 0 26211 8906 70 23 3 0 0 sudo [7292916.369707] [26212] 0 26212 8906 70 23 3 0 0 sudo [7292916.369708] [26213] 0 26213 1127 19 8 3 0 0 sh [7292916.369709] [26214] 0 26214 8906 70 23 3 0 0 sudo [7292916.369710] [26215] 0 26215 5678 42 17 3 0 0 sudo [7292916.369711] [26216] 0 26216 1127 20 9 3 0 0 sh [7292916.369713] [26217] 0 26217 1127 19 8 3 0 0 sh [7292916.369714] [26218] 0 26218 1127 19 8 3 0 0 sh [7292916.369715] [26219] 0 26219 1127 19 8 3 0 0 sh [7292916.369717] [26220] 0 26220 1127 19 7 3 0 0 sh [7292916.369718] [26221] 0 26221 4917 35 14 3 0 0 sudo [7292916.369719] [26222] 0 26222 4926 35 14 3 0 0 sudo [7292916.369720] [26223] 0 26223 5678 41 14 4 0 0 sudo [7292916.369721] [26224] 0 26224 4917 35 15 3 0 0 sudo [7292916.369722] [26225] 0 26225 4917 36 15 3 0 0 sudo [7292916.369724] [26226] 0 26226 16381 181 33 4 0 0 sshd [7292916.369725] Out of memory: Kill process 7633 (php7.0) score 47 or sacrifice child [7292916.370565] Killed process 7633 (php7.0) total-vm:469700kB, anon-rss:100580kB, file-rss:0kB [8562465.400300] nfsd: last server has exited, flushing export cache [8562465.460361] NFSD: Using /var/lib/nfs/v4recovery as the NFSv4 state recovery directory [8562465.460514] NFSD: starting 90-second grace period (net ffffffff81ef3cc0) ``` 我们首先看一下```dmesg --help```的帮助文档. ``` ... -T, --ctime show human readable timestamp (may be inaccurate!) -t, --notime don't print messages timestamp --time-format show time stamp using format: [delta|reltime|ctime|notime|iso] ... ``` 我们只需要加入参数```-T```即可。 ``` [Mon May 11 00:55:37 2020] [26205] 0 26205 14209 116 33 3 0 0 sudo [Mon May 11 00:55:37 2020] [26206] 0 26206 1127 20 8 4 0 0 sh [Mon May 11 00:55:37 2020] [26207] 0 26207 1127 19 8 3 0 0 sh [Mon May 11 00:55:37 2020] [26208] 0 26208 1127 19 8 3 0 0 sh [Mon May 11 00:55:37 2020] [26209] 0 26209 1127 19 7 3 0 0 sh [Mon May 11 00:55:37 2020] [26210] 0 26210 8906 70 24 3 0 0 sudo [Mon May 11 00:55:37 2020] [26211] 0 26211 8906 70 23 3 0 0 sudo [Mon May 11 00:55:37 2020] [26212] 0 26212 8906 70 23 3 0 0 sudo [Mon May 11 00:55:37 2020] [26213] 0 26213 1127 19 8 3 0 0 sh [Mon May 11 00:55:37 2020] [26214] 0 26214 8906 70 23 3 0 0 sudo [Mon May 11 00:55:37 2020] [26215] 0 26215 5678 42 17 3 0 0 sudo [Mon May 11 00:55:37 2020] [26216] 0 26216 1127 20 9 3 0 0 sh [Mon May 11 00:55:37 2020] [26217] 0 26217 1127 19 8 3 0 0 sh [Mon May 11 00:55:37 2020] [26218] 0 26218 1127 19 8 3 0 0 sh [Mon May 11 00:55:37 2020] [26219] 0 26219 1127 19 8 3 0 0 sh [Mon May 11 00:55:37 2020] [26220] 0 26220 1127 19 7 3 0 0 sh [Mon May 11 00:55:37 2020] [26221] 0 26221 4917 35 14 3 0 0 sudo [Mon May 11 00:55:37 2020] [26222] 0 26222 4926 35 14 3 0 0 sudo [Mon May 11 00:55:37 2020] [26223] 0 26223 5678 41 14 4 0 0 sudo [Mon May 11 00:55:37 2020] [26224] 0 26224 4917 35 15 3 0 0 sudo [Mon May 11 00:55:37 2020] [26225] 0 26225 4917 36 15 3 0 0 sudo [Mon May 11 00:55:37 2020] [26226] 0 26226 16381 181 33 4 0 0 sshd [Mon May 11 00:55:37 2020] Out of memory: Kill process 7633 (php7.0) score 47 or sacrifice child [Mon May 11 00:55:37 2020] Killed process 7633 (php7.0) total-vm:469700kB, anon-rss:100580kB, file-rss:0kB [Mon May 25 17:34:46 2020] nfsd: last server has exited, flushing export cache [Mon May 25 17:34:46 2020] NFSD: Using /var/lib/nfs/v4recovery as the NFSv4 state recovery directory [Mon May 25 17:34:46 2020] NFSD: starting 90-second grace period (net ffffffff81ef3cc0) ``` sudo dmesg的命令参数挺多,请多注意查看使用方式
记一次阿里云跨账号迁移遇到的问题 作者: lovingyu_er 时间: 2020-05-08 13:43:00 分类: PHP,Linux性能优化 评论 公司原来的账户是老总的阿里云私人账户(简称:私号),而后来公司为了规范报账,又在阿里云申请了一个公司账号(公号),账号申请后,很多量产ECS 买在了私号上,后来购买了一台RDS。为了进行跨账户连接数据库,采用了阿里云的vpc专用企业云服务,将两个账户的相互授权,达到了ECS 服务器局域网链接公号的RDS,减少了很多的延迟。 最近公司提出要求,将私号的ECS全部转移到公号,这也是阿里云才推出没有多久的功能。 大概的步骤如下: 1.将私号的ECS服务器进行**快照备份^_^** 请耐心等待快照备份完毕,务必! 2.提交工单给阿里云工程师,重要,加急处理。提交的内容,大概如下(具体以阿里云工程师要求的为准): ``` VPC的ECS过户需要提供: 1.源账号和目标账号 2.需要过户的实例ID列表 3.过户的目标安全组(目标安全组与目标交换机必须在同一个VPC内) 4.过户的目标交换机(目标交换机与过户的实例必须在同一个可用区内) 5.目标账户下提交工单说明接收过户实例需求,在源账号下反馈工单ID 6.VPC类型的ECS实例在过户前必须先停机,请您提前安排好停机时间 https://help.aliyun.com/document_detail/72376.html ``` 3.阿里云工程师一般大概2~3分钟操作,完毕,并自动给你重启服务器。 以上三步骤就可以完成服务器的账户对账户迁移,下面说说其中遇到的问题: #####问题1. ssh客户端链接不上ECS服务器 通过在一个vpc的服务器,可以链接上服务器,但是在公共网络下,ssh链接不上服务器。 最后解决方案: 工程师的回答:```过户之后内网是会改变的,如果过户之后网络不通的,基本上是操作系统里面之前网卡设置为静态绑定的。您可以将网络不通的都调整为dhcp即可恢复。 ```, 提供参考的文档如下:```https://help.aliyun.com/document_detail/25433.html?spm=5176.11065259.1996646101.searchclickresult.4c966dcdacBRcN&aly_as=niCU0zZ3``` 如果是密钥对,请直接提供给阿里云的工程师,让他们代为操作,活着通过ubuntu工具转换密钥,在和这台在一个vpc的服务器上,参考上述链接的文档进行修改。 #####问题2.ecs服务器链接不上RDS 最终排查结果:在rds的控制台,没有对ecs的内网ip进行```专用网络```的白名单进行授权。添加授权即可。。 #### 问题3.在nginx的error日志中,发现大连的connect time out的提示 排查问题的原因是因为,php-fpm链接数据库的时候,被拒绝,在使用ecs的```mysql -uuser_name -p -hRDS_ip ```发现,没有反应,最终会导致php-fpm进程超时处理问题。参考**问题2**解决就行。 
50:动态追踪技术怎么用 作者: lovingyu_er 时间: 2020-02-13 14:45:00 分类: 技术品鉴,Linux性能优化 评论 ####动态追踪 动态追踪技术,通过探针机制,来采集内核或者应用程序的运行信息,从而可以不用修改内核和应用程序的代码,就获得丰富的信息,帮你分析、定位想要排查的问题。 ####优点 而动态追踪技术的出现,就为这些问题提供了完美的方案:它既不需要停止服务,也不需要修改应用程序的代码;所有一切还按照原来的方式正常运行时,就可以帮你分析出问题的根源。 同时,相比以往的进程级跟踪方法(比如 ptrace),动态追踪往往只会带来很小的性能损耗(通常在 5% 或者更少)。 ####动态追踪 Solaris 系统的 DTrace。DTrace 是动态追踪技术的鼻祖,它提供了一个通用的观测框架,并可以使用 D 语言进行自由扩展。 Linux上的移植版本:RedHat 主推的 SystemTap。 SystemTap 并没有常驻内核的运行时,它需要先把脚本编译为内核模块,然后再插入到内核中执行。这也导致 SystemTap 启动比较缓慢,并且依赖于完整的调试符号表。
nginx 499问题的解决方案 作者: lovingyu_er 时间: 2020-02-12 21:00:00 分类: 编程语言,NGINX,Ubuntu,运维优化,Linux性能优化 评论 最近公司的测试人员反馈,公司的一个app频道出现```please check network....```的提示,反馈给后台说是后台的问题,后来经过对比,发现nginx的```access.log```中有499的状态码提示,这个不是http的状态码,这个是nginx自定义的。 可以自行下载nginx的源码去查询:```https://github.com/nginx/nginx.git``` 网上大部分的建议是增加一个参数```proxy_ignore_client_abort on; ``` 参数,查看nginx源码部分(```src/http/ngx_http_special_response.c```): ``` ngx_string(ngx_http_error_494_page), /* 494, request header too large */ ngx_string(ngx_http_error_495_page), /* 495, https certificate error */ ngx_string(ngx_http_error_496_page), /* 496, https no certificate */ ngx_string(ngx_http_error_497_page), /* 497, http to https */ ngx_string(ngx_http_error_404_page), /* 498, canceled */ ngx_null_string, /* 499, client has closed connection */ ``` 这些都是nginx自定义的http error code ,推测,可能是客户端的觉得服务器的请求时间过长,不耐烦,直接关闭了与服务器的链接,或者服务器的资源不够,比如```php-fpm```进程处理不了那么多的请求。我目前优化的思路 先通过```ss -s``` 查看tcp 协议中的状态,发现time_wait的状态很很多,能达到200多个,而estab才几十个,看来需要着手优化这里,根据网上的一些文档,增加了一些这样的参数: **```参数修改有两种,一种是命令行修改,重启后失效;另外一种是修改配置文件/etc/sysctl.conf,使用sysctl -p生效```*** ``` net.ipv4.tcp_syncookies = 1表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭; net.ipv4.tcp_tw_reuse = 1表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭; net.ipv4.tcp_tw_recycle = 1表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。 net.ipv4.tcp_fin_timeout = 30 修改系統默认的TIMEOUT时间为60 ,现在修改为了30s net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT套接字的最大数量,(默认是18000). 当TIME_WAIT连接数量达到给定的值时,所有的TIME_WAIT连接会被立刻清除,并打印警告信息。但这种粗暴的清理掉所有的连接,意味着有些连接并没有成功等待2MSL,就会造成通讯异常。一般不建议调整 net.ipv4.tcp_timestamps = 1(默认即为1)60s内同一源ip主机的socket connect请求中的timestamp必须是递增的。也就是说服务器打开了 tcp_tw_recycle了,就会检查时间戳,如果对方发来的包的时间戳是乱跳的或者说时间戳是滞后的,那么服务器就会丢掉不回包,现在很多公司都用LVS做负载均衡,通常是前面一台LVS,后面多台后端服务器,这其实就是NAT,当请求到达LVS后,它修改地址数据后便转发给后端服务器,但不会修改时间戳数据,对于后端服务器来说,请求的源地址就是LVS的地址,加上端口会复用,所以从后端服务器的角度看,原本不同客户端的请求经过LVS的转发,就可能会被认为是同一个连接,加之不同客户端的时间可能不一致,所以就会出现时间戳错乱的现象,于是后面的数据包就被丢弃了,具体的表现通常是是客户端明明发送的SYN,但服务端就是不响应ACK,还可以通过下面命令来确认数据包不断被丢弃的现象,所以根据情况使用 ``` 上述的参数修改以后,发现```time_wait```的参数相对减少了,频率也没有那么高了,说明优化有效。 但是不是说没有,后来,我又增加了一个参数: ``` net.core.somaxconn = 8192 net.ipv4.ip_local_port_range=10000 60999 ``` 这参数增加以后,效果并不是很明显。。 后来一直观察内存 ```sudo watch -d free -h ``` 发现内存不是特别多,想着就增加内存,内存增加以后,499问题消失不见了。 参考文档: 1. ```https://www.cnblogs.com/lwf-blog/p/7346708.html``` 2. ```https://www.cnblogs.com/peteremperor/p/10882076.html``` 3. ```https://cloud.tencent.com/developer/article/1589962```