腾讯云
开发者社区
文档
建议反馈
控制台
登录/注册
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
搜索
搜索
关闭
发布
首页
学习
活动
专区
工具
TVP
最新优惠活动
返回腾讯云官网
皮振伟的专栏
专栏成员
举报
108
文章
312719
阅读量
79
订阅数
订阅专栏
申请加入专栏
全部文章(108)
linux(59)
其他(14)
虚拟化(12)
编程算法(10)
kvm(10)
kernel(8)
http(7)
https(7)
网络安全(6)
github(5)
缓存(5)
云数据库 Redis(4)
git(4)
socket编程(4)
node.js(3)
html(3)
grep(3)
go(2)
打包(2)
ubuntu(2)
开源(2)
shell(2)
ios(1)
c++(1)
php(1)
python(1)
bash(1)
xml(1)
json(1)
云数据库 SQL Server(1)
ide(1)
unix(1)
centos(1)
nginx(1)
bash 指令(1)
命令行工具(1)
企业(1)
存储(1)
分布式(1)
hashmap(1)
udp(1)
gcc(1)
windows(1)
数据结构(1)
架构设计(1)
云计算(1)
流计算 Oceanus(1)
搜索文章
搜索
搜索
关闭
[Linux][seccomp]seccomp引起的SIGSYS问题
虚拟化
命令行工具
编程算法
shell
前言 作者习惯使用Libvrit,多数情况下,会直接使用libvirt进行虚拟机操作。 如果要用qemu启动的情况,一般会比较习惯ps -ef | grep qemu得到qemu的启动参数,进行修改,然后启动。 在一次启动中,qemu发生了错误:qemu-system-x86_64: network script /etc/qemu-ifup failed with status 159 问题的原因是因为seccomp的配置导致的,那么我们就来看一下这个问题的具体表现。 分析 实例代码 构造一段实例代码,在父进程中初始化了seccomp,禁用了execve这个syscall,在子进程中尝试调用execve运行其他的程序。 #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include <seccomp.h> char *cmd = "/bin/ls"; int main() { int pid, status, ret; char *args[4]; char **parg; scmp_filter_ctx ctx; ctx = seccomp_init(SCMP_ACT_ALLOW); if (ctx == NULL) { printf("seccomp_init fail\n"); return 0; } ret = seccomp_rule_add(ctx, SCMP_ACT_KILL, SCMP_SYS(execve), 0); if (ret < 0) { printf("seccomp_rule_add fail\n"); return 0; } ret = seccomp_load(ctx); if (ret < 0) { printf("seccomp_load fail\n"); return 0; } seccomp_release(ctx); pid = fork(); if (pid == 0) { parg = args; *parg++ = cmd; *parg++ = "-al"; *parg++ = "/proc/self/fd"; *parg = NULL; execv(cmd, args); } else { while (waitpid(pid, &status, 0) != pid); printf("status %d\n", status); } return 0; } 需要先安装libseccomp-dev(apt-get install libseccomp-dev),编译的时候: gcc execv.c -g -o execv -lseccomp 运行可以发现,子进程并不是正常退出的。 打开coredump 调整/proc/sys/kernel/core_pattern,配置coredump文件生成的规则。 ulimit -c unlimited调整但前shell的coredump文件大小限制,在当前的shell下运行,文件大小生效。
皮振伟
2019-07-30
2.3K
0
Cgroup CPU Quota技术的不足
grep
shell
前言 cgroup作为Linux上广泛应用的一个功能,用来限制、控制与分离一个进程组群的资源。在内核Linux-4.14上,支持了如下类型(源代码参考https://github.com/torvalds/linux/blob/v4.14/include/linux/cgroup_subsys.h): SUBSYS(cpuset) SUBSYS(cpu) SUBSYS(cpuacct) SUBSYS(io) SUBSYS(memory) SUBSYS(devices) SUBSYS(freezer) SUBSYS(net_cls) SUBSYS(perf_event) SUBSYS(net_prio) SUBSYS(hugetlb) SUBSYS(pids) SUBSYS(rdma) SUBSYS(debug) 查看目前实际打开了其中的一部分: # cat /boot/config-`uname -r` | grep CONFIG_CGROUP_ CONFIG_CGROUP_WRITEBACK=y CONFIG_CGROUP_SCHED=y CONFIG_CGROUP_PIDS=y # CONFIG_CGROUP_RDMA is not set CONFIG_CGROUP_FREEZER=y # CONFIG_CGROUP_HUGETLB is not set CONFIG_CGROUP_DEVICE=y CONFIG_CGROUP_CPUACCT=y CONFIG_CGROUP_PERF=y CONFIG_CGROUP_BPF=y # CONFIG_CGROUP_DEBUG is not set CONFIG_CGROUP_NET_PRIO=y CONFIG_CGROUP_NET_CLASSID=y 尤其是其中的CPU的Quota控制,在以docker为代表的PaaS中大显身手。然而,这并不意味着cgroup的CPU Quota控制就是完美的。例如,希望一个进程占用的CPU不超过200%,那么它的真实的CPU占用是怎样的呢?接下来,作者会构造一段代码,可以算是一种极端场景,来证实这个问题确实存在。
皮振伟
2019-03-07
3.1K
0
没有更多了
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
立即查看
Python精品学习库
代码在线跑,知识轻松学
立即查看
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
立即体验
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
立即查看
领券
问题归档
专栏文章
快讯文章归档
关键词归档
开发者手册归档
开发者手册 Section 归档