2019年12月20日星期五

统计文件夹中所有wav的时长

ls | xargs -i sox {} -n stat 2>&1 | grep Length | awk '{print $3}' | awk '{sum+=$1} END {print sum}'

2019年12月13日星期五

大量http连接TIME_WAIT

netstat -alntp | grep 38080,发现大量的TIME_WAIT,不确定是否正常。

参考了https://cloud.tencent.com/developer/article/1038071,修改/etc/sysctl.conf,增加三行:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

/sbin/sysctl -p 使配置生效。

不确定是否能解决问题,待观察。

2019年11月27日星期三

pip install openpyxl问题解决

使用python2安装openpyxl时一直遇到一个问题:
Collecting openpyxl
  Using cached https://files.pythonhosted.org/packages/f4/5f/fb8706fba43b46716e252fdd3ffdfe801a63a0f4663b80b6f3421d85ab70/openpyxl-3.0.2.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-qUECOe/openpyxl/setup.py", line 28, in <module>
        from importlib.util import module_from_spec, spec_from_file_location
    ImportError: No module named util

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-qUECOe/openpyxl/

发现装3.x版本都不行,pip install pip install openpyxl==2.6.4,换成旧版本之后,解决问题。

2019年11月20日星期三

修改brew update镜像源

替换brew.git:
cd "$(brew --repo)"
git remote set-url origin https://mirrors.ustc.edu.cn/brew.git

替换homebrew-core.git:
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git

SSL connection error: SSL_CTX_set_tmp_dh failed错误

使用conda list查看到openssl的版本是1.1.1d,将openssl降级,问题解决:
conda install openssl=1.0.2r
参考https://github.com/ContinuumIO/anaconda-issues/issues/10646

conda install遇到PackagesNotFoundError

conda install pydub,无法安装,PackagesNotFoundError: The following packages are not available from current channels

解决:conda install -c conda-forge pydub

2019年11月8日星期五

2019年11月7日星期四

记录一个logback奇怪的问题

我在logback中设置了两个appender,一个是console,另一个是file。root的loglevel是INFO,由于INFO级别的日志很多,所以我想将console中log的级别提升为WARN(docker中处理特别多的console log会极大拖慢机器速度),所以在console log的配置中增加了:
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>WARN</level>
    </filter>

设置console的loglever变成了WARN,只有WANR及以上的日志才回输出到console。文件日志还是INFO及以上的日志。加完后有一个新的问题,日志中行号都变成了问号。

解决:在AsyncAppender的配置项里增加 <includeCallerData>true</includeCallerData> 即可。


2019年11月1日星期五

python2 flask get argument处理url编码

import urllib
urllib.unquote(arg.encode('utf-8'))

python2 flask返回结果编码问题

f.jsonify默认是unicode编码,不会出现什么问题,如果想返回改为utf-8编码的话,需要同时设置:
app.config['JSON_AS_ASCII'] = False
app.config['JSONIFY_MIMETYPE'] = 'application/json;charset=utf-8'

不仅需要设置了JSON_AS_ASCII,返回的头也要设置成utf-8。

2019年7月3日星期三

将文件夹中所有文件软链接到另一个文件夹

从A文件夹链接到B文件夹:
cd A
ls | sed "s:^:`pwd`/:" | xargs -i ln -s {} B

后来发现其实有一个最简单的方法:cd B & ln -s A/* .

2019年6月27日星期四

docker写日志导致压测过程中耗时严重问题

今天在用ab做服务的压测,发现用java直接启动,并发数为1、2、3差不多(30ms以内),并发数加到4、5之后性能才有一定下降(50~60ms)。用docker启动服务,并发请求数为1、2、3、4、5时,每次递增时延都有增加,从50ms一直升到了150ms。docker启动的服务性能远差于java直接启动的服务。
检查发现因为我的服务写日志比较多,docker会写/var/lib/docker/containers/container_id/xxx.json这个json格式的日志文件,加上原来java自己的日志文件,写了双份,同时docker会把日志转为json格式。这一过程特别消耗资源。
测试结果显示,关闭log后,并发数为5时,p95的性能直接降到了4ms,效果惊人。

补充:原来设置了两个日志,一个是同步的console日志,一个是异步的文件日志。docker会收集命令行的日志作为自己的日志存成json文件的log。试了下,关了console的日志,保留文件日志,就没有影响了。

2019年4月29日星期一

修改ubuntu镜像源

修改配置文件(/etc/apt/sources.list)将安装源设置为国内的镜像,例如清华Ubuntu 16.04的镜像

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse

可选的ubuntu国内源:
阿里云:http://mirrors.aliyun.com/ubuntu/
清华:https://mirrors.tuna.tsinghua.edu.cn/ubuntu/

2019年4月16日星期二

java读取resources文件遇到的一个问题

spring中用applicationContext.getResources获取到Resource类实例之后,因为打包为jar之后resource文件在jar中,不在文件系统中,通过resource.getURI().getPath()为null,可以通过resource.getURL().getPath()获取到路径,比如:file:/Users/chenxiaoyu/project/target/project-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/data/xx.txt

2019年4月9日星期二

非root用户修改hosts

参考https://unix.stackexchange.com/a/104511

vim ~/.hosts,增加hosts配置,比如:
hostname x.x.x.x

export HOSTALIASES=~/.hosts,done

2019年2月20日星期三

mac中docker资源分配的问题

在mac中安装了docker后使用-m参数设置很高的内存发现没有用,启动后的container内存依旧是限制在了最大2g。后来发现在mac的右上角docker图标中选择设置 -> advanced中,有docker资源的配置。

2019年2月18日星期一

libstdc++.so.6: version `GLIBCXX_3.4.20' not found

今天在ubuntu 14.04上运行一个编译好的二进制文件,报错:/usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.20' not found

>> strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_DEBUG_MESSAGE_LENGTH

>> ls -l /usr/lib/x86_64-linux-gnu/libstdc++.so.6
lrwxrwxrwx 1 root root 19 Jan 27  2016 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 -> libstdc++.so.6.0.19

是libstdc++.so.6版本过低的原因,没有GLIBCXX_3.4.20,但c++代码中里的需要用到GLIBCXX_3.4.20,所以需要升级g++。

ubuntu 14.04 默认是gcc 4.8.4版本,如果还没有安装gcc,那么:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
sudo apt-get update
sudo apt-get install -y --force-yes gcc

如果已经安装gcc,那么升级gcc版本到4.8.5(最好不这么升级,自行查一下如何升级gcc):
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

2019年1月17日星期四

mac安装mysql

参考https://gist.github.com/operatino/392614486ce4421063b9dece4dfe6c21

Install brew services first : $ brew tap homebrew/services

Load and start the MySQL service : $ brew services start mysql@5.7
Expected output : Successfully started mysql (label: homebrew.mxcl.mysql)

Check of the MySQL service has been loaded : $ brew services list

Force link 5.7 version - $ brew link mysql@5.7 --force

Verify the installed MySQL instance : $ mysql -V

安装完成后mysql配置读取顺序默认为:/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf

找到相应的文件,修改配置,然后brew services restart mysql@5.7

2019年1月11日星期五

tensorflow的c++ so编译问题

tensorflow1.6的二进制包是用gcc4编译的,bazel在gcc5上使用到tensorflow的库的话编译会有问题,如下:


如果需要在gcc5上兼容tensorflow库,需要在编译选项中加上 bazel build --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0"