<!-- #请根据issue的类型在标题右侧下拉框中选择对应的选项(需求、缺陷或CVE等)-->
<!-- #请根据issue相关的版本在里程碑中选择对应的节点,若是与版本无关,请选择“不关联里程碑”-->
【标题描述】打开多个任务,每个任务打开大量文件,回收进程systemd长时间CPU冲高
【环境信息】
硬件信息:
arm64
软件信息:
OLK5.10
【问题复现步骤】
具体操作步骤
1. gcc -o aa a.c
```
#define _GNU_SOURCE /* See feature_test_macros(7) */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/mount.h>
#include <getopt.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/xattr.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/syscall.h>
#include <errno.h>
#include <string.h>
#include <linux/reboot.h>
#include <arpa/inet.h>
#include <pthread.h>
#include <grp.h>
#include <sys/prctl.h>
#include <linux/fs.h>
#include <signal.h>
#include <sched.h>
#include <sys/wait.h>
#include <sys/mman.h>
#include <linux/perf_event.h>
#include <linux/bpf.h>
#include <sys/sysinfo.h>
#include <sys/epoll.h>
#include <asm/unistd.h>
#include <sys/time.h>
#include <sys/sendfile.h>
#include <stdarg.h>
int main(int argc, char *argv[])
{
int i;
for (i = 0; i < 50000; ++i) {
if (open("test.txt", O_RDWR | O_CREAT) < 0)
perror("open fail");
}
while(1) {
sleep(0.5);
}
return 0;
}
```
2. ./run.sh # Termial 1
```
#!/bin/bash
sysctl -w fs.file-max=120000000
for((i=0;i<200;i++))
do
ulimit -n 200000
./aa > test.txt &
done
while true
do
proc_info=`cat /proc/sys/fs/file-nr`
array=(${proc_info// / })
if [[ ${array[0]} -gt 10000000 ]]
then
break
fi
echo ${array[0]}
sleep 1
done
```
3. ./access.sh # Termial 2, after run.sh finish
```
#!/bin/sh
echo "access fds"
pids=`ps aux | grep aa | awk '{ print $2 }' | sed \\$d`
for pid in $pids
do
ls /proc/$pid/fd > /dev/null
echo "access $pid"
done
echo "loop ps, please kill all aa"
while true
do
ps > /dev/null
done
```
4. time killall -wq aa
出现概率(是否必现,概率性错误)
大概率
【预期结果】
systemd长时间CPU冲高
【实际结果】
```
time killall -wq aa
real 4m40.946s
user 0m0.010s
sys 0m0.052s
```
```
top # during killall
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 73152 8144 6348 S 99.7 0.0 0:22.56 systemd
5117 root 20 0 145096 1688 1448 R 99.7 0.0 0:04.86 ps
```
描述出问题的结果
【附件信息】
比如系统message日志/组件日志、dump信息、图片等