我有一个烦人的僵尸进程,它被 init 采用,它不会消失。我读过有一种方法可以创建一个虚拟进程,将僵尸附加为该新进程的子进程,然后杀死它,将其从进程表中删除。
我将如何做到这一点,准确地说?
是的,我已经阅读了大部分内容:
僵尸进程已经死了,所以它不能被杀死。
或者
你应该重启你的系统
和
僵尸进程不使用任何资源,您应该让它们使用
不幸的是,许多程序检查进程表以查看实例是否已经在运行,如果进程表中有条目,则将拒绝启动新的实例。
每次我的 SSHFS 连接断开时重新启动,带着 Sublime,有点傻。
我正在处理具有内存泄漏的旧版 .NET 应用程序。为了尝试缓解内存溢出情况,我将应用程序池内存限制设置为 500KB 到 500000KB (500MB) 之间的任何位置,但是应用程序池似乎不尊重设置,因为我可以登录并查看物理内存(5GB 及以上,无论值如何)。这个应用程序正在杀死服务器,我似乎无法确定如何调整应用程序池。为了确保此应用程序池不超过大约 500 MB 的内存,您建议进行哪些设置。
这是一个示例,应用程序池正在使用 3.5GB 的


因此,服务器再次崩溃,原因如下:

具有低内存限制的相同应用程序池,1000 个回收请求,每两到三分钟会导致一个回收事件,但有时它会跑掉。
我也对任何可以监视此过程的工具持开放态度(作为任务或服务每 30 秒运行一次),并且可以在超过某个限制时将其终止。
在对有问题的系统进行故障排除时,您通常如何识别 Windows 任务管理器中的进程?
通过任务管理器获取任务列表很容易,但您如何确定哪些应该保留,哪些是删除的候选?
我有一个守护进程,我想知道它打开了哪些文件(理想情况下它的 CWD 是什么)。有什么shell命令可以告诉我吗?
(在 Ubuntu 10.04 64 位服务器上运行)
昨天,我犯了一个错误,即在没有使用 screen 的情况下通过 SSH 启动一个进程(我没有意识到这需要几天的时间才能运行)。我今天花了一整天的时间试图找出某种方法,我可以从 SSH 的铁腕中撬出进程的输出,以便我可以重新启动我的客户端机器,但没有任何进展。
我尝试使用 gdb 并按照本页底部的说明进行操作,但是当我运行第一个 gdb 命令来创建文件时,我收到一条错误消息,指出No symbol table is loaded. Use the "file" command. 根据我收集的内容,这意味着我必须重新编译其输出的程序我正在尝试重定向,这当然对我来说绝对没有帮助,因为它已经在运行。
我还认为我可以使用 retty 将输出重定向到另一个终端,但显然它不能在 64 位平台上编译。
如何将此进程的输出重定向到另一个终端或文件?
我最近有一次编写 shell 脚本的经历,该脚本通过消耗所有资源使服务器崩溃(并损坏了分区)。它连接到一个 cron 作业,运行时间似乎比执行之间的间隔时间更长,随着时间的推移,滚雪球失控。
现在,我已经修改了它以记录其运行状态,并且不会同时运行多次。我的问题是:还有其他简单的方法可以保护脚本免受伤害吗?是否有一个标准的脚本应该做的事情列表,以确保正常运行、不消耗太多资源、优雅地失败、提醒正确的人等?
基本上:我应该避免哪些其他陷阱?
最近有一台运行 CentOS 6.7 的专用服务器,我们运行了更新并注意到 top 仅显示当前用户的进程。
[myuser@server2 ~]$ top -b -n1
top - 20:19:20 up 1 day, 10:09, 3 users, load average: 0.80, 0.50, 0.41
Tasks: 11 total, 1 running, 10 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.0%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 32880988k total, 26893324k used, 5987664k free, 140872k buffers
Swap: 1046520k total, 0k used, 1046520k free, 19532120k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1648 myuser 20 0 98.8m …Run Code Online (Sandbox Code Playgroud) 我尝试删除文件。最相关的答案可以在这里找到,但我没有找到运气。这是原来的问题:
maxgitt@mgpc:~$ sudo rm -rf /var/lib/docker/
rm: cannot remove '/var/lib/docker/aufs': Device or resource busy
Run Code Online (Sandbox Code Playgroud)
为了找到该过程,我尝试了以下操作:
maxgitt@mgpc:~$ sudo lsof +D /var/lib/docker/
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
Run Code Online (Sandbox Code Playgroud)
所以我尝试在上述答案的评论中找到但一无所获,
maxgitt@mgpc:~$ /sbin/fuser -m /var/lib/docker/
bash: /sbin/fuser: No such file or directory
Run Code Online (Sandbox Code Playgroud)
连ps进程都找不到
maxgitt@mgpc:~$ ps aux | grep docker
maxgitt 5349 0.0 0.0 14224 1024 pts/18 S+ 15:21 0:00 grep --color=auto docker
maxgitt@mgpc:~$
Run Code Online (Sandbox Code Playgroud)
关于如何终止这个神秘过程的任何帮助都会很棒。
我试图确定是否可以通过特定接口有选择地从进程或进程组路由 IP 数据包,而所有其他数据包都通过另一个接口路由。也就是说,我希望所有流量/usr/bin/testapp都通过,eth1而所有其他数据包通过eth0。这种情况下的数据包可以是 TCP、UDP、ICMP 等,并且可以由最终用户配置为使用各种端口。
因为我无法轻松地强制相关进程绑定到特定接口,所以我试图通过路由实现相同的结果。这可能吗?
- - 编辑 - -
通过这里和其他许多地方的一个有用建议,是基于 UID 标记数据包;这并不是真正的目标。目标是基于 process 标记/过滤/路由,而不管 user。也就是说,如果说了,alice,bob和charlie所有运行自己的实例/usr/bin/testapp; 来自所有三个实例的所有数据包都应该通过,eth1而来自系统的所有其他数据包都应该通过eth0。
请注意,通过源/目标端口、用户名/UID 等进行标记是不够的,因为不同的用户可能会运行testapp并且他们可能会自行设置不同的端口~/.config/testapp.conf或其他任何内容。问题是关于按流程过滤。
一个可用的选项,尽管我不知道它有多大帮助,是/bin/(ba|z)?sh在本机二进制文件周围使用基于 -based 的包装器。
- - 编辑 - -
我指的是在运行现代 Linux 内核(例如 4.0 或更高版本)的系统上进行路由。如果有软件依赖性超越iproute2,nftables,conntrack和类似的工具,我愿意探索开源解决方案,但基本工具是优选的。
我被要求调查今天早上发生的高 CPU 使用率警报。我使用sar -p并看到当时出现的高CPU使用率
接下来我曾经ps -eo pcpu,pid,user,args | sort -r -k1 | less列出了这个时间前 10 名的内存猪
现在我如何找出早上那个特定时间导致瓶颈的进程。我是一名 Java 开发人员,而不是 Linux 专家。
甚至有可能吗?