问题描述:
业务同事反应产品进程访问数据库延时过大,进而导致业务中断,手台呼叫失败;进程的拉起方式不同,数据库访问延时有较大差异;
1. 串口或启动脚本拉起进程访问数据库延时较大,进程cpu占用率高
SQLITE_API Exe Time is 0
SQLITE_API Realloc Time is 0
SQLITE_API Get Result Time is 0
SQLITE_API Total Sql Exe Time is 0
SQLITE_API Total Sql free Time is 0
Mem: 433304K used, 7159372K free, 264K shrd, 5884K buff, 102280K cached
CPU: 0.0% usr 3.6% sys 0.0% nic 96.2% idle 0.0% io 0.0% irq 0.0% sirq
Load average: 0.47 0.40 0.29 3/175 1111
PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND
886 1 root S 1203m 16.2 6 3.6 /PDT_PRODUCT.bin
981 974 root R 3064 0.0 2 0.0 top
819 1 root S 2928 0.0 6 0.0 /usr/sbin/telnetd -F
113 2 root IW 0 0.0 3 0.0 [kworker/u16:1-d]
197 2 root SW 0 0.0 0 0.0 [mali-simple-pow]
855 1 root S 229m 3.0 0 0.0 /usr/bin/adbd
801 1 root S 73904 0.9 2 0.0 /usr/sbin/ntpd -g -p /var/run/ntpd.pid
473 1 root S 14544 0.1 1 0.0 /sbin/udevd -d
810 1 nobody S< 4148 0.0 2 0.0 /usr/sbin/gpsd -P /var/run/gpsd.pid /dev/ttyS7
898 1 root S 4136 0.0 4 0.0 -/bin/sh
960 819 root S 4116 0.0 3 0.0 -bash
974 819 root S 4116 0.0 3 0.0 -bash
771 770 root S 2948 0.0 3 0.0 dhcpcd: [privileged proxy]
861 771 dhcpcd S 2948 0.0 2 0.0 dhcpcd: [BPF BOOTP] dummy0
891 771 dhcpcd S 2948 0.0 2 0.0 dhcpcd: [BPF BOOTP] eth0
903 771 dhcpcd S 2948 0.0 2 0.0 dhcpcd: [BPF BOOTP] eth1
904 771 dhcpcd S 2948 0.0 2 0.0 dhcpcd: [BPF ARP] dummy0 169.254.11.15
921 771 dhcpcd S 2948 0.0 3 0.0 dhcpcd: [BPF ARP] eth0 169.254.43.28
928 771 dhcpcd S 2948 0.0 2 0.0 dhcpcd: [BPF ARP] eth1 169.254.43.28
1 0 root S 2928 0.0 4 0.0 init
456 1 root S 2928 0.0 0 0.0 /sbin/syslogd -n
460 1 root S 2928 0.0 0 0.0 /sbin/klogd -n
867 1 root S 2928 0.0 2 0.0 tcpsvd 0 21 ftpd -w /
2. 网口模拟终端登录shell后拉起的进程访问数据库延时小,进程cpu占用了低
SQLITE_API Exee Time is 0
aSQLITE_API Realloc Time is 0
SQLtITE_API Get Result Time is 0
SQLITE_API Total Sql Exe Timeu is 26
SQLITE_API Total Sql free Time is 0
Mem: 432788K used, 7159888K free, 264K shrd, 5892K buff, 101888K cached
CPU: 0.0% usr 0.1% sys 0.0% nic 99.8% idle 0.0% io 0.0% irq 0.0% sirq
Load average: 0.00 0.10 0.17 1/174 1162
PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND
1115 960 root S 1202m 16.2 4 0.0 /PDT_PRODUCT.bin
981 974 root R 3064 0.0 2 0.0 top
819 1 root S 2928 0.0 1 0.0 /usr/sbin/telnetd -F
168 2 root SW 0 0.0 3 0.0 [spi3]
7 2 root IW 0 0.0 2 0.0 [kworker/u16:0-d]
1093 2 root IW 0 0.0 7 0.0 [kworker/u16:3-e]
1161 2 root IW 0 0.0 0 0.0 [kworker/0:2-eve]
855 1 root S 229m 3.0 0 0.0 /usr/bin/adbd
801 1 root S 73904 0.9 2 0.0 /usr/sbin/ntpd -g -p /var/run/ntpd.pid
473 1 root S 14544 0.1 1 0.0 /sbin/udevd -d
810 1 nobody S< 4148 0.0 2 0.0 /usr/sbin/gpsd -P /var/run/gpsd.pid /dev/ttyS7
898 1 root S 4136 0.0 4 0.0 -/bin/sh
960 819 root S 4116 0.0 6 0.0 -bash
974 819 root S 4116 0.0 3 0.0 -bash
771 770 root S 2948 0.0 7 0.0 dhcpcd: [privileged proxy]
861 771 dhcpcd S 2948 0.0 2 0.0 dhcpcd: [BPF BOOTP] dummy0
891 771 dhcpcd S 2948 0.0 2 0.0 dhcpcd: [BPF BOOTP] eth0
903 771 dhcpcd S 2948 0.0 2 0.0 dhcpcd: [BPF BOOTP] eth1
904 771 dhcpcd S 2948 0.0 2 0.0 dhcpcd: [BPF ARP] dummy0 169.254.11.15
921 771 dhcpcd S 2948 0.0 3 0.0 dhcpcd: [BPF ARP] eth0 169.254.43.28
928 771 dhcpcd S 2948 0.0 2 0.0 dhcpcd: [BPF ARP] eth1 169.254.43.28
1 0 root S 2928 0.0 5 0.0 init
问题分析:
1. 考虑进程优先级不够
拉起进程时使用最高优先级
nice -n -20 /PDT_PRODUCT.bin &
查看进程优先级
ps ax -o nice,pid,ppid,comm
参考: Linux系统进程优先级(查看,指定,更改)_枝子的博客-优快云博客_linux 进程优先级
结果:延时依旧大,cpu占用率依旧高
2. 考虑打印过多,串口响应慢,网口响应快
串口终端和启动脚本的打印都会打到串口上,响应慢;ssh、telnet登录的虚拟终端媒介是网口,响应快;
但这是怎么影响到数据库访问呢?
推断:数据库访问插入的过程中有打印输出,如果访问方式是同步,会被串口阻塞一段时间,但输出到网口几乎没有阻塞;
解决方法:
1. 进程后台执行,打印不输出到终端,输出到指定文件
/PDT_PRODUCT.bin >PDTlog.txt 2>&1 &
延时低,cpu占用率低,业务正常,问题解决;但是日志文件无限增大浪费空间,并且可能引发资源告警;
2. 进程后台执行,打印不输出到终端,输出指向/dev/null
/PDT_PRODUCT.bin > /dev/null 2>&1 &
延时低,cpu占用率低,业务正常,问题解决;
如果要查看打印可以登录ushell后pad到产品进程,这样打印就都通过ushell输出了;
注意:
打印需要分模块控制,过多打印可能引发系统异常、干扰问题定位等问题产生;
数据库访问提速:事务+关闭写同步+执行准备(存储过程),如果对数据库安全性有要求的话,就开启写同步。