在将应用程序部署到生产环境中时,无论使用什么系统以及进行什么功能和回归测试,仍然会遇到不可避免的错误。 在100%的时间使用CPU时,您可能会死机,或者在几个线程被锁定而从不释放资源的情况下,您可能会陷入死锁。 在某些情况下,即使在多处理器体系结构和快速硬件上,您也会看到应用程序中非常古老的挂起(甚至几十年前)。
在这种情况下,来自应用程序的错误日志或来自应用程序转储的堆栈跟踪通常很少或根本没有帮助查明问题产生的确切代码行。 即使重新创建了问题,您也可能无法收集有关该问题的太多信息。
通常,您能做的最好的事情就是重现问题并找出失败的代码。 在最坏的情况下,即使在重新创建确切的生产环境之后(由于系统和硬件配置的潜在巨大负担,这非常困难),您也可能找不到多处理器环境中挂起问题的根本原因。
一种可以为您或面临此问题的客户提供帮助的方法是使用操作系统上可用的处理器相似性设置方法。
您可以在程序中使用AIX®平台上可用的bindprocessor命令或AIX平台上可用的bindprocessor API。 bindprocessor命令将进程的内核线程绑定或bindprocessor绑定到处理器。
您还可以使用bindprocessor命令列出可用的处理器。 唯一需要输入的是要绑定或取消绑定线程的进程的进程标识符。 一旦绑定了进程的内核线程,它们将始终被安排为在所选处理器上运行。
bindprocessor命令的语法为:
bindprocessor Process [ ProcessorNum ] | -q | -u Process{ProcessID [ProcessorNum] | -u ProcessID | -s SmtSetID | -b bindID ProcessorNum | -q }下表1中使用了以下标志:
假设进程p1在多CPU硬件上运行。 您需要将进程绑定到CPU1,并使用ps命令检查状态。
要查询机器上的可用处理器,请尝试: # bindprocessor -q The available processors are: 0 1 将进程ID为14662的p1进程绑定到处理器1: # bindprocessor 14662 1 检查以确保该进程绑定到指定的处理器: #ps -emo THREAD | grep p1 USER PID PPID TID ST CP PRI SC WCHAN F TT BND COMMAND root 4460 5428 - A 0 60 7 f0145c10 240001 - - /usr/sbin/rpc.mountd root 4710 5428 - A 0 60 4 * 240001 - - /usr/sbin/tftpd -n root 14662 10566 - A 120 126 0 - 200001 pts/0 1 ./p1 取消绑定过程: # bindprocessor -u 14662 检查以上命令的结果: # ps -emo THREAD | grep p1 USER PID PPID TID ST CP PRI SC WCHAN F TT BND COMMAND root 12672 10566 - A 1 60 1 50a05e84 200001 pts/0 - grep p1 root 14662 10566 - A 78 111 0 - 200001 pts/0 - ./p1如果要为绑定到指定处理器的二进制文件提供可调参数, bindprocessor也是AIX提供的子例程。 要阅读有关bindprocessor子例程的更多详细信息,请参阅AIX手册页上的《 IBM AIX基本操作系统和扩展技术参考》 。
下面的清单1显示了bindprocessor子例程的bindprocessor 。
要编译先前的程序,请输入:
# cc â????o setpb setpb.c下面显示了运行以上已编译代码的setpb程序二进制文件的结果。
要将setpb绑定到CPU 1,请输入:
# setpb 1结果是:
Number of Processor 2 Processor Online 2 Process affinity set to specified CPU 1要查看setpb是否绑定到CPU 1,请输入:
# ps -emo THREAD | grep setpb结果是:
USER PID PPID TID ST CP PRI SC WCHAN F TT BND COMMAND Root 15080 10566 - A 85 102 0 - 200001 pts/0 0 setpb 1使用下面的参数运行setpb程序,因此它尝试绑定到0号CPU。
# setpb 0结果是:
Number of Processor 2 Processor Online 2 Process affinity set to specified CPU 0检查setpb是否绑定到0号CPU的命令是:
# ps -emo THREAD | grep setpb结果是:
USER PID PPID TID ST CP PRI SC WCHAN F TT BND COMMAND Root 15082 10566 - A 99 109 0 - 200001 pts/0 0 setpb 0使用以下参数运行setpb程序,使其尝试绑定到4号CPU。计算机上不存在CPU 4,因此它将显示以下错误消息并运行默认的可用处理器。
# setpb 4 Number of Processor 2 Processor Online 2 Processor parameter specified is out of configured processors要检查setpb是否绑定到CPU4,请输入:
# ps -emo THREAD | grep setpb显示以下内容:
USER PID PPID TID ST CP PRI SC WCHAN F TT BND COMMAND Root 15084 10566 - A 87 103 0 - 200001 pts/0 0 setpb 4翻译自: https://www.ibm.com/developerworks/aix/library/au-processinfinity.html
相关资源:jdk-8u281-windows-x64.exe