关于 bkill 的杀掉进程的问题

    你是否有遇到下面的问题,提交了很多 jobs 到集群机器中,导致了很多 job 被 PEND 了,这种情况是在等待状态为 RUN 的那些 jobs 运行完成,但是你有没有想过一个问题就是,当那些RUN的 job 中有一个运行出错了,这样这个进程就一直在处于等待的阶段,一直占用着内存等信息。

    当然,我们可以使用 bkill 根据 JOBID 来结束该 job,像下面的操作:

bkill 467727

        执行上面的命令后,JOBID 为 467727的 job 就会被kill掉,但是有一个问题就是当你要 kill 掉所有状态为 PEND 的 jobs的时候,你该不会去一个一个来 kill 吧,太浪费时间了, 而且也很无聊。对此,小编有以下几个推荐,看看你觉得哪一个合适:

        第一:使用 python 脚本作为辅助,也就是将要 kill 的所有 jobs 的 id 的范围记录下来然后进行遍历 kill : 

import os 
for i in range(467721, 467742):
    os.system("bkill " + str(i))

这种情况只适合于要 kill 的 jobs id 是连续的;

        第二:将所有的 jobs 都 kill 掉,就相当于把屏幕显示的所有进程都 kill 掉:

bkill -u $user_name 0    // $user_name代表进程表中的第二列 USER

        第三:如果是选择性的 kill 某些 jobs 的话,则可以通过将 jobs 打印到文件中,然后编辑文件,使文件里面保留要被 kill 的 jobs 的 id 号:

bjobs > serven              // 把 jobs 状态放到文件serven里面
gvim serven                 // 进入 serven 文件, 删掉那些除进程以外的信息,可以通过替换来删除比较快速
cat serven | xargs bkill    // 删掉 serven 文件里面的内容

        第四: 杀掉提交到某个 queue (例如:cent6) 的所有进程:

bkill -q cent6 0            // 0 代表该 queue 里面所有的进程

         

        对于删不掉的 job 加上”-r“

bkill -r $JOBID

        查看进程执行到了那一步:

bjobs -w    // 可以得到详细的进程信息

        查看某个进程执行到哪里的并且打印信息:

bpeek -f $JOBID

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
AIX常用命令://查看机器序列号,IBM的基本信息都可以通过该命令查询得到 #prtconf #oslevel -r == uname -a //操作系统版本 #oslevel //查看操作系统版本ex :5.1.0.0 #oslevel -r //ex:5100-04 == oslevel -q //双机软件版本号 # lslpp -l|grep cluster //显示graphic display # lsdisp //查看CPU的个数 # bindprocessor -q //查看CPU的主频,操作系统版本最低是AIX 5.1,包含在软件包bos.pmapi.pmsvcs pmcycles This machine runs at 1500MHz //显示cpu的主频是1.5G #如何查找根文件系统(/)中的大文件 find -xdev -size +xxxx -ls #查找根卷组下大于2M的文件, 并根据文件大小排序, 大文件在前. find / -xdev -size +1024 -ls |sort -r +6 8277 624 -r-xr-xr-x 1 root system 635390 Jul 31 2003 /sbin/helpers/jfs2/fsck 28 596 -rw-r--r-- 1 root system 609388 Apr 12 17:25 /smit.log 30 1660 -rw-r--r-- 1 root system 3338083 Apr 5 14:08 /core #查看备份磁带中备份文件的大小 tcopy /dev/rmt0 tcopy: Tape File: 1; Records: 1 to 251; Size: 2097152. ---磁带机文件头大小 tcopy: Tape File: 1; Record: 252; Size 344064. ---磁带机文件头大小 tcopy: File: 1; End of File after: 252 Records, 526729216 Bytes. ---文件大小 tcopy: The end of the tape is reached. tcopy: The total tape length is 526729216 bytes. #如何取定文件与文件集的对应关系,有时想使用某个安装文件, 但没有安装包含该文件的文件集,找到文件集来安装所需文件 首先确认系统中已经安装了“bos.content_list”文件集(fileset), 如果没有安装, 请使用smitty installp进行安装. 运行which_fileset命令, 根据文件查找对应的文件集. 例如: #which_fileset iostat /usr/bin/iostat bos.acct 5.1.0.0 运行lslpp -f 命令, 查看指定文件集中包含的文件: #lslpp -f bos.acct //出于AIX系统安全考虑, 需要使某些用户只能在控制台登录使用,而不允许远程登陆使用. 更改/etc/security/user 文件中需要限制的用户的rlogin属性(rlogin = false) 当再次尝试远程登录时, 系统报错:Remote logins are not allowed for this account, 表示修改成功 //如何自动logout用户 有的用户登录后就长时间空闲,有可能导致安全上的问题,通过打开 /etc/profile 中 TMOUT 注释,将在设置的时间到达后自动logout用户 例如: export TMOUT=120 那么, 用户两分钟没有击键,将自动logout //AIX系统中如何限制用户所使用文件的大小(AIX小型机有大文件限制) >#smit chuser 在菜单上选择要控制的用户, 并修改下面两项: Soft FILE size [aaa] Hard FILE size [aaa] 则修改后用户的文件大小最大为aaa×512 bytes. >如何验证? 可以用该用户登录系统, 使用命令“ulimit -f”和“ulimit -Hf”可分别显示其fsize,fsize_hard的大
常见问题及处理方案 CPU使用率高的问题 通过操作系统命令top topas glance等查看top进程号,确认是系统进程还是oracle应用进程,查询当前top进程执行的操作和sql语句进行分析。 根据进程号获取正在执行的sql SELECT a.osuser, a.username,b.address,b.hash_value, b.sql_text from v$session a, v$sqltext b, v$process p where p.spid = &spid and p.addr = a.paddr and a.STATUS = 'ACTIVE' and a.sql_address =b.address order by address, piece; 数据库无法连接 数据库无法连接,一般可能是如下原因造成: (1)数据库宕了 (2)监听异常 (3)数据库挂起 (4)归档目录满 (5)数据库或应用主机的网卡出现问题不能正常工作 (6)应用主机到数据库主机的网络出现问题。 1、数据库宕了 立即启动数据库。 Startup 2、监听异常 此时一般体现为: 监听进程占用CPU资源大;d 监听日志异常。 此时,立即重启监听,监听重启一般能在1分钟之内完成。 Lsnrctl restart 3、数据库挂起 立即重启数据库。 Startup 4、归档目录满 (1)在没有部署OGG数据同步的情况下,立即清理归档日志文件。 (2)如果部署了OGG数据同步,查看OGG正在读取的归档日志文件,立即 清理OGG不再需要的日志文件。 5、数据库或应用主机的网卡出现问题不能正常工作。 立即联系主机工程师处理。 6、应用主机到数据库主机的网络出现问题。 立即联系网络维护人员查看。 CRS/GI无法启动 对于10g及11gR1版本的CRS问题 1、进入/tmp目录下,看是否产生了crsctl.xxxxx文件 如果有的话,看文件内容,一般会提示OCR无法访问,或者心跳IP无法 正常绑定等信息。 2、如果/tmp目录下没有crsctl.xxxxx文件 此时查看ocssd.log文件,看是否能从中得到有价值的信息。 可能的问题:网络心跳不通。 3、/tmp目录无crsctl.xxxxx且日志中没有报错信息,只有停CRS时的日志信 息。 此时可能是RAC两个节点对并发裸设备的访问有问题,此时考虑: (1)停掉两个节点的CRS。 (2)两个节点先同时去激活并发VG,然后再激活VG。 (3)重新启动CRS。 对于11gR2的GI问题 分析$GRID_HOME/log/nodename目录下的日志文件,看是否能从中找出无法启动的原因。 常见问题: 1、心跳IP不同。 2、ASM实例无法启动。 对CRS的故障诊断和分析,参加本文档中RAC部分的MOS文档. 数据库响应慢 应急处理步骤: (1)找到占用CPU资源大的sql或者模块,然后停掉此应用模块。 (2)如果属于由于种种原因引起的数据库hang住情况,立即重启数据 库,此时重启需要约15分钟时间。 重要说明: 如果重启数据库的话,会有如下负面影响: (1)要kill掉所有连接到数据库中的会话,所有会话都会回滚。 (2)立即重启的话,不能获取并保留分析数据库挂起原因的信息,在后续分析问题时,没有足够信息用于分析问题产生的根本原因。 一般正常重启的话,都需要手动获取用于分析数据库重启原因的信息,以便编写分析报告,但是在最长情况下,获取日志信息可能就要40分钟时间。此时一般做systemstate dump,且如果是rac情况的话,需要2个节点都做,且需要做2次或以上。 常规处理步骤,分如下几种情况处理: (1)所有业务模块都慢。 (2)部分业务模块慢。 (3)数据库hang住。 所有业务模块都慢 此时首先查看系统资源,看是否属于CPU资源使用率100%的问题,如果是,参考本章“CPU使用率高的问题”解决办法。如果系统资源正常,那很可能是数据库hang住了,此时参考数据库Hang部分。 部分业务模块慢 分析运行慢的模块的sql语句: (1)看是否是新上的sql。 (2)看执行计划是否高效。 (3)优化运行慢的模块的sql语句。 数据库hang住 应急处理方式:重启数据库。 常规处理方式: (1)分析alert日志,看是否能从alert日志中,可以很快找到引起问题的原 因。 (2)做3级别的hanganalyze,先做一次,然后隔一分钟以后再做一次。 并分析hanganalyze 生成的trace文件,看是否可以找到引起数据库hang 住的会话的信息。 (3)做systemstate dump 此时生成systemstate dump的时间会比较长,尤其是在会话数量较多的情 况下。且生成dump文件的大小较大,在G级别以上。在生成一次以 后,过一分钟再收集一次,另外如果是RAC,那么两个节点都需要收 集。 对hang做dump请参考“对数据库HANG做DUMP一章”。 数据误删除 此问题,没有应急办法,只能按如下步骤处理: 1、对于10g及以上版本,看是否可以通过闪回进行恢复。 2、查看测试环境数据库,看其中是否有需要的数据。 3、使用备份进行恢复,此方法一般花费时间较长。 快速shutdown数据库 1. 停止监听 2. 做一个检查点操作 SQL> alter system checkpoint; 3. 杀掉所有LOCAL=NO的操作系统进程 AIX、HP-UX、Linux、Solaris: $ ps -ef|grep $ORACLE_SID| grep LOCAL=NO | grep -v grep |awk '{print $2}'|xargs -i kill -9 {} Windows: SQL> select 'orakill ' || (select value from v$parameter where name = 'instance_name') || ' ' ||p.spid from v$process p, v$bgprocess bp where p.ADDR = bp.PADDR(+) and bp.PADDR is null and p.SPID is not null; 在命令行执行: C:\> orakill db1 7642 C:\> orakill db1 7644 4. 停止数据库 SQL> shutdown immediate 清理分布式事务 -- 9i需要设置_sum_debug_mode SQL> alter session set "_smu_debug_mode" = 4; alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS'; column local_trna_id format a20 column global_tran_id format a25 SELECT LOCAL_TRAN_ID, GLOBAL_TRAN_ID, FAIL_TIME,STATE, MIXED FROM DBA_2PC_PENDING; LOCAL_TRAN_ID GLOBAL_TRAN_ID FAIL_TIME STATE MIX -------------- ------------------------- -------------------- ---------------- --- 12.29.103137 TAXIS.9572b613.12.29.103137 30-aug-2011 10:09:11 collecting no SQL> commit force '12.29.103137'; Commit complete. SQL> EXECUTE DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('12.29.103137'); PL/SQL procedure successfully completed. SQL> commit; -- 清理每个分布式事务都需要commit; 数据泵 1. 相关参数 PARALLEL参数考虑 可以设置成物理CPU(不是逻辑CPU)数的两倍数目,然后调整 对于Data Pump Export,PARALLEL参数必须要小于等于dump files数 对于Data Pump Import,PARALLEL不要比dump文件数大很多,可以大一些。这个参数也指定了导入时创建索引的并行度。 PARALLEL只允许在企业版使用。 nohup expdp system/manager schemas=kdjm DIRECTORY=DUMP_FILES PARALLEL=3 dumpfile=expCASES_%U.dmp logfile=nnsiexp2008_12_28.log & 通配符 %U,它指示文件将按需要创建,格式将为expCASES_nn.dmp,其中nn 从 01 开始,然后按需要向上增加 相关监控 -- 监控长事务 set linesize 120 column opname heading 'Operation' format a25 column target heading 'Target' format a15 column pct heading 'Percent' format 999 column es heading 'Elapsed|Seconds' format 999999 column tr heading 'Time|Remaining|Seconds' format 99999 column program format a30 column machine format a16 select L.sid ssid, substr(opname,1,25) opname, target, trunc((sofar/totalwork)*100) pct, to_char(60*sofar*8192/(24*60*(last_update_time-start_time))/1024/1024/60, '9999.0') Rate, round(elapsed_seconds/60, 2) es, round(time_remaining/60, 2) tr, program, machine from v$session_longops L, v$session s where time_remaining > 0 and l.sid = s.sid order by start_time; 坏块恢复 在遇到坏块的时,一般应按以下的流程来处理: 1 如果坏块的对象是索引,重建索引 2 使用备份来进行恢复 3 使用10231事件,或者DBMS_REPAIR.SKIP_CORRUPT_BLOCKS过程,让oracle跳过坏块,然后用exp导出表和使用CREATE TABLE AS创建新表。 4 尝试使用SQL脚本将完好的数据复制到一个新表中,或者用EXP配合QUERY参数导出完好的数据。 5 手工修改坏块。 有两种情况是不能使用事件10231和DBMS_REPAIR.SKIP_CORRUPT_BLOCKS来跳过坏块的: 1 硬件问题造成OS层不能读取数据。 2 表中的非数据块,或者说是元数据块。比如段头,Extent Map块。这种坏块是不能跳过的。 3 在表中存在有其他异常的块,从单个块来看都没有损坏,checksum值也是正确的,但是有的块在段内却是有问题的。比
### 回答1: 在操作系统中,进程是正在执行的程序,它们拥有一定的资源和状态。有时候,我们需要终止一个进程,例如当它运行不正常或者占用了过多的资源等情况。通常我们会用kill命令来终止进程,但有些情况下,kill命令无法杀死进程。此时,我们可以采取以下解决方法: 1. 使用kill -9命令:在一般情况下,kill命令发送一个信号给进程,让它在接收信号后自行终止。但有些进程可能会忽略该信号,导致无法终止。此时,可以使用kill -9命令,它会强制终止进程,即无条件地将进程杀死。但需要注意,这种方法可能会使进程无法正常地释放资源和清理状态,可能会导致其它问题。 2. 使用kill -SIGKILL命令:与kill -9类似,SIGKILL是一个特别的终止信号,它也可以强制终止进程。但它不同于kill -9的是,SIGKILL会让操作系统立即释放该进程占用的全部资源,包括内存、文件描述符等。因此,如果你需要释放资源并重置系统状态,可以考虑使用kill -SIGKILL命令。 3. 使用pstree命令:有些进程可能是由其它进程fork出来的子进程,因此,它们可能会受到父进程的保护而无法被kill命令终止。这时候,我们可以使用pstree命令查看进程树,找到该进程的父进程,并终止它。一般而言,这种方法较为可靠,不会对系统造成太多的影响。 总之,杀进程的方法有很多种,但需要注意的是,我们应该根据具体情况选择不同的方法,并尽量避免使用强制终止命令,以免引起其它的问题。同时,我们也应该注意保护好自己的系统,防止恶意进程以及病毒占用系统资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三贝勒文子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值