nginx配置中的if条件与querystring配置例子

    set $search 0;
    if ($request_uri ~ "_search"){
        set $search 1;
    }
    if ($request_uri ~ "_count"){
        set $search 1;
    }
    
    if ($arg_ignore_unavailable = true) {
        set $search "${search}1";
    }
    if ($search = 1) {
        set $args $args&ignore_unavailable=true;
    }
    
    
    if ($arg_preference = "") {
        set $args $args&preference=$upstream_http_django_user;
    }
    
    Read More...

    部署superset+clickhouse

    我选择使用docker方式安装部署, 虽然中间碰到两个坑, 但对于之后的二次部署或者多次部署,应该还是简单一些.

    Read More...

    mmap中shared方式锁定的内存能否释放

    很多文章都提到 cache中的 shared memory的cache不能被释放, 比如https://linux.cn/article-7310-1.html, 那自然就有一个问题: 如果系统内存用完了, 程序继续通过share memory mmap读取数据, 会发生什么情况?

    是老的cache被释放, 还是读取失败?

    做了一下测试, 还是会释放的, 只不过不能通过 echo 3 > /proc/sys/vm/drop_caches 这种方式释放而已.

    找一个4G内存的机器做下测试.

    写了一段代码, mmap读取一个3G文件的每一页, 这样就会让文件常驻cache了. echo 3 > /proc/sys/vm/drop_caches 之后可以看到cahce没有少, vmtouch也可以看到未释放.

    然后 cat another-3G-file > /dev/null,通过 vmtouch可以看到老文件已经有page不在cache中了. 而another-3G-file几乎全部在cache.

    Read More...

    golang里面array/slice的内存分配测试1

    1. 当cap还够用的时候, append不会申请新内存
    2. cap不够的时候, 会申请一块新内存. buf = append(buf, …), 新得到的buf会是一块新内存,指针是变掉的, 新的cap是之前的两倍(但一定是8的偶数倍, 比如2->8, 10->32)
    3. newbuf = buf[2:5] 生成slice的时候, newbuf指向buf[2], 他们共用同一块内存, 直到上面2中描述的新内存申请后, 他们会指向不同内存. 不管是buf还是newbuf扩容
    4. make([]byte, 10)[0:] , len, cap都是10, append会分配新内存.
    5. make([]byte, 10)[0:0] , len是0, cap是10, append 10 以内不会分配新内存
    Read More...

    函数中传递指针引起的一个BUG

    我是觉得编程里面最烧脑的就是传值和传引用的甄别, 一不小心就会出错.

    我是写一个kafka lib https://github.com/childe/healer, producer的类写好了, 然后在此基础上写一个可执行文件, 从stdin输入数据, 然后写入kafka.

    简单说一下producer逻辑, 输入1000条之后做为一批数据一起写kafka, 或者是200ms定时器到了就写, 哪怕没有1000条.

    但是在测试过程中, 无意间发现, 最终写到kafka的数据是错乱的, 后面写的数据会把前面的数据覆盖掉. 比如先输入 1111111111, 再输入 2222222222, 最后写到kafka的就是两条 2222222222

    这就让人很尴尬了…

    Read More...

    ES中使用mmap存储的索引会锁定内存不释放?

    在可用内存不充足的情况下, ES中索引配置如果使用mmapfs, 会导致内存不足, Load飙升.

    虽然从发现这个问题到最后确认原因,花了很长时间, 这里长话短说.

    Read More...

    git rebase移动commit到另外分支

    起因

    有两个分支, 一个master, 一个topic.

    master上面有commit: A C D
    topic上面有commit: A B C D

    本来是要在master上面提交2个新的commit: X Y , 但提交之后才发现是在topic上面提交的. 现在想把 X Y 两个commit移动到mater上面.

    git rebase --onto 可以实现这个功能, 模拟一下.

    模拟脚本

    用下面这个脚本模拟一下当前的情况

    git init
    date > 1
    git add 1
    git commit -m'1'
    git checkout -b dev
    date > 2
    git add 2
    git commit -m'2'
    git checkout master
    date > 3
    git add 3
    git commit -m'3'
    git checkout dev
    git merge master -m'merge from master into dev'
    date > 4
    git add 4
    git commit -m'4'
    date > 5
    git add 5
    git commit -m'5'
    

    脚本执行之后的commit情况

    * 2d2e87a - (HEAD -> dev) 5 (2 seconds ago) <childe>
    * afef668 - 4 (2 seconds ago) <childe>
    *   472e819 - merge from master into dev (2 seconds ago) <childe>
    |\
    | * ac945fe - (master) 3 (2 seconds ago) <childe>
    * | 1afa191 - 2 (2 seconds ago) <childe>
    |/
    * 18f563a - 1 (2 seconds ago) <childe>
    

    移动commit

    [/private/tmp/1521020400 on dev]
    % git checkout -b newbranch
    Switched to a new branch 'newbranch'
    [/private/tmp/1521020400 on newbranch]
    % git rebase --onto master 472e819 newbranch
    First, rewinding head to replay your work on top of it...
    Applying: 4
    Applying: 5
    [/private/tmp/1521020400 on newbranch]
    % git checkout master
    Switched to branch 'master'
    [/private/tmp/1521020400 on master]
    % git merge newbranch
    Updating ac945fe..33c077f
    Fast-forward
     4 | 1 +
     5 | 1 +
     2 files changed, 2 insertions(+)
     create mode 100644 4
     create mode 100644 5
    [/private/tmp/1521020400 on dev]
    % git rebase --onto 472e819  dev
    

    具体文档参见 https://git-scm.com/docs/git-rebase/2.21.0

    Read More...

    vmtouch

    vmtouch可以方便的控制和诊断文件在系统Cache中的情况

    官方文档在https://hoytech.com/vmtouch/

    Read More...

    使用span query解决elasticsearch中的一种复杂搜索

    “传说中的陈老师”(什么鬼??)提了一个需求, 是想利用ES来做一种比较复杂的搜索情况, 我自己测试了一下span query, 看起来是可以满足.

    Read More...