串口或启动脚本拉起进程的数据库访问慢

问题描述:

业务同事反应产品进程访问数据库延时过大,进而导致业务中断,手台呼叫失败;进程的拉起方式不同,数据库访问延时有较大差异;

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输出了;

注意:

打印需要分模块控制,过多打印可能引发系统异常、干扰问题定位等问题产生;

数据库访问提速:事务+关闭写同步+执行准备(存储过程),如果对数据库安全性有要求的话,就开启写同步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值