Maxisvest的博客

技术 生活 原创


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

排查一次线上connect reset by peer的异常

发表于 2020-03-29 | 分类于 网络 阅读次数:

公司业务系统中有一个功能是某个系统客户端要定时加载目标jar包到系统中实现功能的热扩展,线上出了一个很奇怪的异常,是jar包提供端出现了connect reset by peer,隔一段时间就会报异常
并且业务功能并没有受到影响,但是毕竟是生产环境,一点错误都有可能造成损失,问题还是要看的啊

首先定位问题,该异常由jar包提供端抛出,jar删除后便不再抛出,由此基本可以缩小范围至客户端加载jar包代码,但是光看代码似乎并没有什么大的问题
所以我需要看看服务端抛异常的时候究竟在干什么,这里就用到了tcpdump,用这个工具将服务端的tcp日志打印出来

服务端部署在docker容器中,首先使用nsenter将命名空间锁定到容器的pid

1
2
3
4
5
6
//获取容器id/name
docker ps | grep xxx
//获取PID
docker inspect --format "{{.State.Pid}}" container_id/name
使用nsenter切换网络命名空间
nsenter -n -t pid

之后查找客户端所在的ip地址,也就是tcpdump中要用到的host信息,我们要锁定查找范围为服务端到客户端之间的所有连接

使用命令
tcpdump host 你的host -w tcphistory.pcap

阅读全文 »

一种简单的mysql数据压缩方案

发表于 2019-09-02 | 分类于 数据库 阅读次数:

方案

业务中某张表存储的数据量较大,导致磁盘飞速增长
于是需要找到一种方案来减小线上数据库的占用量

业务使用的数据库为mysql数据库,InnoDB引擎
故可以考虑使用InnoDB引擎自带的压缩方案

教程

1.查询表原来所占的空间

1
2
3
select concat(round(sum(data_length/1024/1024),2),'MB') as data 
from information_schema.tables
where table_schema='数据库名' AND table_name = '表名';

阅读全文 »

开源线性规划器optaplanner

发表于 2019-08-24 | 分类于 算法 阅读次数:

前言

optaplanner为一个开源的整数规划求解器,不仅可以计算N皇后等经典算法问题,还可以解决目前很多现实问题,例如:

  • 最短路线
  • 服务器负载
  • 课表安排
    等等
  • 其有着相对较快的求解速度以及多种约束编写方式。

    软件更新速度相对较快并且文档丰富特别的perfect。

    模型及约束基本设计流程

    1.基本流程

    设计一个结果载体及各种决策变量,开始计算前,我们先初始化所有决策变量及结果变量,计算时由解法器解法器根据规则具体决定填充到哪个将决策变量田中到结果中的哪个位置,例如在一个课表编排中,决策变量可以是时间,结果变量是一个课程,课程上边有空着的时间槽,用来填充时间,当计算完成时,时间也就被填充到了课表变量上,那么,我们就得到了一个课程具体上课的时间。

    阅读全文 »

    记录一次docker容器频繁oom的问题排查

    发表于 2019-07-27 | 分类于 docker 阅读次数:

    业务系统在docker内内存持续增大,导致频繁被系统kill
    使用 cat /var/log/message 查看kernal日志得到是因为oom被系统kill

    使用docker stats 查看容器运行状况

    docker run 命令如下(使用了lxcfs,事实证明最后的解决方案并不需要用到lxcfs)

    1
    docker run -m 2800M --memory-swap 3500M --memory-swappiness 60 -p 9011:9011 -dit --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --restart=always -e CATALINA_OPTS='-Xmx200m' --name=${project} --network=host -v /etc/localtime:/etc/localtime:ro --hostname=alioracle  -v logs${project}:/tools/tomcat8/logs -v /tools/application2.properties:/tools/tomcat8/bin/application.properties $extrarunops scm.nicezhuanye.com:6555/$p:$version`

    设置-Xmx200m

    (使用-swapiness可以决定程序使用交换内存的意愿,0-100,0表示绝对不会使用交换内存,越大使用的概率越大,设置交换内存后,程序把交换内存跑满,一样会被kill)

    阅读全文 »

    使用lxcfs提高docker容器的资源可见性

    发表于 2019-07-18 | 分类于 docekr 阅读次数:

    问题

    docker容器中,使用top,free等名称查看的资源使用情况不是容器自身的资源使用情况,而是宿主机的资源使用情况,这可能会令某些程序中依赖的第三方库运行在容器中时使用相同的渠道读取系统资源情况错误而导致崩溃
    实际上,容器中使用top,free等命令是从宿主机的

    1
    2
    3
    4
    5
    6
    /proc/cpuinfo
    /proc/diskstats
    /proc/meminfo
    /proc/stat
    /proc/swaps
    /proc/uptime

    中获取信息

    为了避免这种情况,可以使用一个叫做lxcfs的服务提高资源可见性
    lxcfs是一个常驻服务,它启动以后会在指定目录中自行维护与上面列出的/proc目录中的文件同名的文件,容器从lxcfs维护的/proc文件中读取数据时,得到的是容器的状态数据,而不是整个宿主机的状态。

    使用

    yum安装

    wget https://copr-be.cloud.fedoraproject.org/results/ganto/lxd/epel-7-x86_64/00486278-lxcfs/lxcfs-2.0.5-3.el7.centos.x86_64.rpm yum install lxcfs-2.0.5-3.el7.centos.x86_64.rpm

    启动

    lxcfs /var/lib/lxcfs &

    阅读全文 »

    算法题Z字打印(或N字打印)

    发表于 2019-05-12 | 分类于 算法 阅读次数:

    在leetcode刷到一道算法题,比较有意思
    最后的战绩是这样的
    执行用时 : 9 ms, 在ZigZag Conversion的Java提交中击败了98.64% 的用户 内存消耗 : 36 MB, 在ZigZag Conversion的Java提交中击败了99.96% 的用户

    因为基本用的都是对数组的操作,所以会快一点
    题目是这样的:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    //将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
    //输入: s = "LEETCODEISHIRING", numRows = 4
    //输出: "LDREOEIIECIHNTSG"
    //解释:

    L D R
    E O E I I
    E C I H N
    T S G

    实际上就是走龙字形

    实现思路就是将原字符串打散成char[](以下称为原数组),然后重组这个数组的下标,最后根据重组的下标拼成新的字符串输出
    我们可以按照上边给出的示例将整个输出拆成相同的单元,如下

    1
    2
    3
    4
    L        D        R
    E O E I I
    E C I H N
    T S G

    题目中给出的最大行数是4
    所以,每个单元的最大长度就是4 * 2 - 2,得到公式max = 2n - 2
    这时再按行来看,第一个单元的第一个字母对应原数组的0下标,第二个单元第一个字母对应0 + max,以此类推,直到下标与max的和大于原数组总长度,这时就该折行了
    第二行第一个单元第一个字母对应原数组的的第二个下标,也就是1下标,但这时问题来了,第一个单元和第二个单元之间多存在了一个字母O,怎么办呢
    其实逐行来看,除了第一行和最后一行,每一行的两个单元之间都存在一个字母,这时我们把这个字母左边的空间称为leftSpace
    右边的空间称为rightSpace,而第一行,特殊的可以看成leftSpace == max, rightSpace == 0,最后一行反之
    而随着行号的不同,leftSpace以每行2个的速度递减,rightSpace以每行2的速度递增

    这时,我们就找到了规律,从第二行开始,这行的所有下标就是从1开始,以leftSpace和rightSpace交替增加得到所有下标

    当然第一行我们也可以写成leftSpace和rightSpace交替增加的样子,但是因为第一行rightSpace为0,所以会出现两次相同的结果,这时需要特殊处理下,只记一次

    阅读全文 »

    一些相对实用的IDEA插件

    发表于 2019-05-06 | 分类于 教程 阅读次数:

    Maven Helper

    一个很实用的maven插件
    http://plugins.jetbrains.com/plugin/7179-maven-helper/versions

    Rainbow Brackets

    看习惯还好,我看了眼花。。。
    http://plugins.jetbrains.com/plugin/10080-rainbow-brackets/versions

    Translation

    强无敌
    http://plugins.jetbrains.com/plugin/8579-translation/versions

    Alibaba Java Coding Guidelines

    参考意义强大
    http://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelines/versions

    lombok(下载时选择对应版本)

    比较实用的一款getter setting映射插件
    http://plugins.jetbrains.com/plugin/6317-lombok/versions

    FindBugs-IDEA

    只是提供一些建议,有时候还是需要跟着业务走
    http://plugins.jetbrains.com/plugin/3847-findbugs-idea/versions

    docker 指南

    发表于 2018-11-14 | 分类于 docker 阅读次数:

    windows

    dokcertoolbox就是一个运行着精简的linux的虚拟机,这个虚拟机中跑着docker,就是这样
    安装好docker tool box后,桌面会多出来3个图标,第一个是命令窗口,第二个是docker虚拟机里面镜像什么的管理界面,第三个是虚拟机的管理(类似于VM虚拟机)

    dockertoolbox安装过程和问题(必看)
    https://blog.csdn.net/qq2712193/article/details/54576313(window7下利用DockerToolbox安装Docker)
    https://blog.csdn.net/qq_33575129/article/details/78196279(使用docker时报错“net/http: TLS handshake timeout”的解决方案)

    阅读全文 »
    123…5
    小于同学

    小于同学

    技术 生活 原创

    50 日志
    14 分类
    35 标签
    E-Mail
    © 2016 – 2022 小于同学
    总访客量 合计阅读数