kryo的Input读取字符串导致的FullGC问题

#kryo的Input读取字符串导致的FullGC问题
昨天某线上项目策划反馈有一个服卡顿,请求响应时间特别长,经过长时间排查发现起因是Kryo解码时读取字符串导致产生一个1.2G大小的char数组,撑爆了堆内存,现将排查过程和结果做一次总价,与大家分享,如果表述或者认知有误的地方,请谅解。

阅读更多

关于Netty发送消息堆积问题

最近一个H5游戏上线,出现堆外内存暴涨问题,于是进行了简单的分析,发现暴涨原因竟是服务器消息发送不出去,导致Netty发送队列堆积,内存上涨,针对此次分析,做一些总结。

SO_SEND_BUF和SO_REC_BUFF

    阅读更多

    linux中的dmesg命令以及确定进程是否被系统主动kill

    近期发现线上项目的进程莫名其妙的就不见了,也没有崩溃日志,就怀疑是被操作系统主动kill掉了,但是苦于没有确凿的证据,经过一番查询,发现dmesg命令可以看到操作系统内核的一些日志。

    确定进程是否被Kill

    执行dmesg命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    [bin]# dmesg
    [882877.989319] Out of memory: Kill process 10212 (java) score 121 or sacrifice child
    [882878.001160] Killed process 10212, UID 0, (java) total-vm:13098572kB, anon-rss:5027928kB, file-rss:208kB
    [915713.862428] TCP: Peer 42.225.50.34:51564/8017 unexpectedly shrunk window 155723080:155723151 (repaired)
    [915751.446054] TCP: Peer 1.61.9.67:1945/8017 unexpectedly shrunk window 3428410295:3428410361 (repaired)
    [916016.586020] TCP: Peer 223.245.136.70:26593/8017 unexpectedly shrunk window 2000807687:2000807751 (repaired)
    [916787.644015] TCP: Peer 1.61.9.67:1945/8017 unexpectedly shrunk window 3429952513:3429952529 (repaired)
    [917496.356084] TCP: Peer 183.214.214.76:10836/8001 unexpectedly shrunk window 776640860:776640960 (repaired)
    [917842.106120] TCP: Peer 183.214.214.76:10836/8001 unexpectedly shrunk window 776767925:776768001 (repaired)
    [918184.273393] TCP: Peer 1.61.9.67:1945/8017 unexpectedly shrunk window 3432537400:3432537416 (repaired)
    [918354.099425] TCP: Peer 1.61.9.67:1945/8017 unexpectedly shrunk window 3433043715:3433043731 (repaired)
    [918458.735018] TCP: Peer 14.204.144.115:44067/8017 unexpectedly shrunk window 3982300320:3982300359 (repaired)
    [918975.201329] TCP: Peer 1.61.9.67:1945/8017 unexpectedly shrunk window 3434818386:3434818406 (repaired)
    [919021.112801] TCP: Peer 1.61.9.67:1945/8017 unexpectedly shrunk window 3434951074:3434951094 (repaired)
    [919245.007146] TCP: Peer 1.61.9.67:1945/8017 unexpectedly shrunk window 3435724834:3435724895 (repaired)

    阅读更多

    基数排序

    桶排序(Bucket Sort)

    在说基数排序之前,先讲一下通排序。

    Bucket Sort原理:
    如果输入M个数字,这些数字介于0-N(N > 0)之间,在数据输入的时候我们预留了一个大小为数组 Count,称之为桶。

    阅读更多

    关于用GCC编译的时候出现multiple definition of 'xxx'的情况

    在使用C语言编写如下测试代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //util.h
    #ifndef __UTIL_H__
    #define __UTIL_H__
    #include <stdio.h>
    void logInfo(char* msg)
    {
    printf("%s\n", msg);
    }
    #endif

    阅读更多

    vim一些用法

    在学习使用vim的过程中随手记录的一些小东西,以便后期查询。

    修改vim的tab为4空格

    1
    2
    3
    4
    set tabstop=4
    set softtabstop=4
    set shiftwidth=4
    set noexpandtab / expandtab

    阅读更多

    时间复杂度的表示

    时间复杂度表示方法

    • 如果存在正常数c和n,使得当N ≥n时 T(N) ≤cf(N),则记为T(N) = O(f(N));

    阅读更多

    Google的ConcurrentLinkedHashMap和Guava的Cache

    由于项目中一直使用的Google的ConcurrentLinkedHashMap作为JVM缓存的容器,该项目已经很久没有更新,从作者的官方文档中看到ConcurrentLinkedHashMap已经被合并到了Guava包中,推荐使用Guava的MapMaker和CacheBuilder,本文稍微简述一下两者的用法。

    阅读更多

    Redis并发性能测

    工具

    使用redis自带的redis-benchmark,具体用法如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # ./redis-benchmark --help
    Usage: redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests]> [-k <boolean>]
    -h 指定服务器主机名 127.0.0.1
    -p 指定服务器端口 6379
    -s 指定服务器 socket
    -c 指定并发连接数 50
    -n 指定请求数 10000
    -d 以字节的形式指定 SET/GET 值的数据大小 2
    -k 1=keep alive 0=reconnect 1
    -r SET/GET/INCR 使用随机 key, SADD 使用随机值
    -P 通过管道传输 <numreq> 请求 1
    -q 强制退出 redis。仅显示 query/sec 值
    --csv 以 CSV 格式输出
    -l 生成循环,永久执行测试
    -t 仅运行以逗号分隔的测试命令列表。
    -I Idle 模式。仅打开 N 个 idle 连接并等待。

    阅读更多

    CentOS上安装Redis

    安装redis

    1
    2
    3
    $ wget http://download.redis.io/releases/redis-3.2.5.tar.gz
    $ tar -zxvf redis-3.2.5.tar.gz
    $ make PREFIX=/usr/local/redis-3.2.5 install

    阅读更多