0%

数据库日志中出现警告:

1
2
2016-10-10 03:04:29 CST \[26586-131\] LOG: checkpoints are occurring too frequently (17 seconds apart)
2016-10-10 03:04:29 CST \[26586-132\] HINT: Consider increasing the configuration parameter "checkpoint_segments".

checkpoint_segments参数按默认设置3过小了,这里有几个相互关联的参数,有时间好好看看。

References:
[1]PgSQL · 特性分析 · 谈谈checkpoint的调度
[2]PostgreSQL 中 checkpoint 和 WAL 日志量的关系以及优化
[3]postgresql之checkpoint(检查点)

===
[erq]

cURL stands for “see URL” or “client for URLs”, the recursive version is “Curl URL Request Library”.

rkt是一个容器引擎和规范,Kubernetes已经支持rkt容器引擎,rkt兼容docker,但其更unix更安全。

Kubernetes + rkt可以组建基于容器的云计算平台,而openstack是为虚拟化而生。

openstack结合Kubernetes可以组建既有虚拟化又有容器的混合云计算平台。

安装rkt

当前debian官方只有sid源里有rkt包,而且版本略滞后,因此可以这样安装最新版本的rkt

1
2
3
$ wget https://raw.githubusercontent.com/coreos/rkt/master/scripts/install-rkt.sh
$ chmod +x install-rkt.sh
$ sudo ./install-rkt.sh

install-rkt.sh脚本会生成deb包再安装。

卸载

1
$ sudo apt remove rkt --purge

References:
[1]Installing rkt on popular Linux distributions

===
[erq]

netcat大名鼎鼎,功能多样。
netcat衍生版本众多,nmap.org提供的版本ncat是其中的佼佼者。

ncat带宽测量

机器A:

1
$ ncat -l -p 2000 > /dev/null

机器B:

1
2
3
4
$ dd if=/dev/zero bs=1024M count=1 ncat address_of_A 2000
1+0 records in
1+0 records out
1073741824 bytes transferred in 12.486022 secs (85995510 bytes/sec)

两台机器之间的带宽大约在82MB/s。

使用pv

可以更动态、更直观的看到两者之间的速度

机器A:

1
$ ncat -l -p 2000 pv > /dev/null

机器B:

1
$ dd if=/dev/zero bs=256M pv ncat address_of_A 2000

iperf3带宽评估

iperf/iperf3是更为专业的网络吞吐量测工具,使用也很简。
服务端:

1
2
$ iperf3 -s
Server listening on 5201

客户端

1
$ iperf3 -c ip_of_server

iperf3会有更细致的吞吐量报告。
更详细的使用参见man。

References:
[1]Netcat for Windows

===
[erq]

System Integrity Protection关闭打开的方法:启动mac时按住command+R,然后打开终端执行:csrutil disable enable,然后reboot即可。

nmap实现了一个功能更丰富的netcat,叫做ncat,随nmap一起发行,同样是跨平台的。

升级xcode 8.0后,编译qt程序时:

1
2
3
$ qmake -project
Project ERROR: Xcode not set up properly. You may need to confirm the license agreement by running /usr/bin/xcodebuild.
/opt/Qt/5.7/clang_64/mkspecs/features/mac/default_post.prf:35: Variable QMAKE_XCODE_VERSION is not defined.

修改文件Qt_install_folder/5.7/clang_64/mkspecs/features/mac/default_pre.prf

1
isEmpty($$list($$system("/usr/bin/xcrun -find xcrun 2>/dev/null"))): \\

更改为

js isEmpty($$list($$system("/usr/bin/xcrun -find xcodebuild 2>/dev/null"))): \\

也就是将find后面的xcrun改为xcodebuild

===
[erq]

以tomcat8用户运行soffice服务:

1
$ sudo -u tomcat8 soffice --accept="socket,host=0,port=8100;urp;StarOffice.ServiceManager" --headless --nofirststartwizard --nologo --nodefault --nocrashreport --nolockcheck &

提示错误:

1
2
3
\[Java framework\] Error in function createSettingsDocument (elements.cxx).
javaldx failed!
Warning: failed to read path from javaldx

这是由于soffice没有权限无法写配置文件造成的错误。
tomcat8的用户主目录为/usr/share/tomcat8,此目录的所有者和组都是root,soffice需要在用户主目录下写.config和其他配置文件才能正常工作,所以造成了以上问题。

如果非要使用tomcat8用户来运行soffice,则可以这样来解决此问题:

1
$ sudo chown tomcat8:tomcat8 /usr/share/tomcat8

如果一个用户对自己的主目录都没有所有权,这怎么也说不过去吧。

update(17/10/2019):
tomcat9 on debian buster系统,启动soffice时提示:

1
2
3
4
javaldx failed!
Warning: failed to read path from javaldx

(process:12586): dconf-CRITICAL **: 09:57:38.865: unable to create directory '/.cache/dconf': Permission denied. dconf will not work properly.

tomcat9在系统内的用户为tomcat,主目录为/

1
2
3
$ sudo systemctl stop tomcat9.service
$ sudo usermod --home /usr/share/tomcat9 tomcat
$ sudo chown tomcat /usr/share/tomcat9

再次运行soffice一切正常。

1
sudo -u tomcat8 /usr/bin/tomcat soffice --accept="socket,host=0,port=8100;urp;StarOffice.ServiceManager" --headless --nofirststartwizard --nologo --nodefault --nocrashreport --nolockcheck &

===
[erq]

XA是open group提出的分布式事务处理规范,JTA支持XA规范,JTA只规定了接口,有些应用容器提供实现,也有一些三方的开源实现可用,比如Atomikos。

如果PostgreSQL参与分布式事务(XA)处理,则需要在配置文件postgres.conf中设置max_prepared_transactions参数,此参数用于指定分布式事务中两步提交准备事务的最大数量。默认值为0,此时不支持分布式事务。

max_prepared_transactions参数值不应该小于max_connections参数值,这样每一个session都可以至少有一个可用的准备事务。

1
2
max_connections = 100
max_prepared_transactions = 100

如果有standby服务器,则standby服务器上这两个参数值都不能小于master服务器上的相应值。

References:
[1]Configuring PostgreSQL for XA
[2]PREPARE TRANSACTION
[3]18.4. Resource Consumption

===
[erq]

使用JODConverter转换文档时,需要连接到正在运行的OpenOffice并执行API调用,这需要openoffice创建一个UNO监听器并运行于监听模式下。
下面记叙openoffice以TCP监听模式启动作为后台服务的配置方法。

安装

当前的debian testing官方源已经不再提供openoffice,因为这货被libreoffice替代了。去ooo官方下载Linux 64-bit(x86-64)(DEB)版本,下载的为tar.gz包,解压后进入en_US/DEBS目录,安装此目录下的所有deb包。

1
# dpkg -i *.deb

ooo被安装在了/opt/openoffice4目录,可执行程序soffice位于/opt/openoffice4/program目录下。

监听模式启动ooo

1
2
$ unset DISPLAY
$ ./soffice -nologo -headless -nofirststartwizard -accept="socket,host=0,port=8100;urp;tcpNoDelay;StarOffice.ServiceManager"

这样ooo在本地所有网络接口地址的TCP 8100端口上启动监听服务。如果只在本地回环地址监听,可以设置host为127.0.0.1或localhost。
服务模式启动时不要设置DISPLAY变量。

libreoffice

ooo自从被收入o记囊中,是一天不如一天了,最近又传闻因为没有活跃的开发者要项目要关闭了。ooo当前最新的4.1.2还是2015年10月发布了,这货是没救了。

libreoffice则开发活跃,如日中天,开源社区真不是哪家公司可以一手遮天的,再大的公司也不行。

其实本篇所述的监听模式启动ooo是完全适用于libreoffice的,因此不必大费周章的安装openoffice,直接官方源安装libreoffice-common和libreoffice-writer即可。soffice bin存在于libreoffice-common包中,同时还需要安装jdk和libreoffice-java-common包。

使用libreoffice时,命令行参数使用双中线开头,不然会有deprecated提示:

1
2
3
4
Warning: -nologo is deprecated. Use --nologo instead.
Warning: -headless is deprecated. Use --headless instead.
Warning: -nofirststartwizard is deprecated. Use --nofirststartwizard instead.
Warning: -accept=socket,host=0,port=8100;urp;tcpNoDelay;StarOffice.ServiceManager is deprecated. Use --accept=socket,host=0,port=8100;urp;tcpNoDelay;StarOffice.ServiceManager instead.

注:ooo是openoffice.org曾经的简称,不知道现在为何官方不再使用了。

为libreoffice设置systemd服务
编辑libreoffice.service单元文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
\[Unit\]
Description=LibreOffice service
After=syslog.target

\[Service\]
ExecStart=/usr/bin/soffice --accept="socket,host=0,port=8100;urp;StarOffice.ServiceManager" --headless --nofirststartwizard --nologo --nodefault --nocrashreport --nolockcheck
Restart=always
KillSignal=SIGQUIT
Type=simple
StandardError=syslog
NotifyAccess=all
User=tomcat8

\[Install\]
WantedBy=multi-user.target

将编辑好的文件拷贝到/lib/systemd/system文件夹,然后启用该unit文件,最后启动libreoffice服务。

1
2
3
4
5
6
$ sudo cp libreoffice.service /lib/systemd/system/
$ sudo systemctl enable libreoffice.service
Created symlink from /etc/systemd/system/multi-user.target.wants/libreoffice.service to /lib/systemd/system/libreoffice.service.
$ sudo systemctl start libreoffice
$ sudo netstat -anp grep 8100
tcp 0 0 0.0.0.0:8100 0.0.0.0:* LISTEN 9895/soffice.bin

可以看到libreoffice已经启用了后台服务,并在8100端口进行监听。

update(17/10/2019):
debian buster系统:
只安装libreoffice-common和libreoffice-writer包即可,tomcat9的系统用户为tomcat,权限问题参考权限导致soffice(libreoffice/openoffice)无法运行的问题

References:
[1]systemd service script for libreoffice/openoffice
[2]Libreoffice LSB init script
[3]Starting Multiple OpenOffice Instances

===
[erq]