EBS: addisctl.sh: exiting with status 1

本文记录了一次EBS启动过程中的错误情况,并给出了详细的错误信息及各服务的启动状态。针对启动失败的服务提供了具体的解决办法。

不知是何原因,启动EBS时候报错,具体报错代码如下:

Setting service Oracle Apache Server TEST_erptest to mode 2 Executing service control script: /d01/oracle/testcomn/admin/scripts/TEST_erptest/adapcctl.sh start Timeout specified in context file: 100 second(s)

script returned: ****************************************************

adapcctl.sh version 115.43

Starting Apache Web Server Listener (dedicated HTTP) ... Starting Apache Web Server Listener (dedicated PLSQL) ...

adapcctl.sh: exiting with status 0

.end std out.

.end err out.

****************************************************

Setting service OracleTNSListener80APPS_TEST_erptest to mode 2 Executing service control script: /d01/oracle/testcomn/admin/scripts/TEST_erptest/adalnctl.sh start Timeout specified in context file: 100 second(s)

script returned: ****************************************************

adalnctl.sh version

Checking for FNDFS executable. Starting listener process APPS_TEST.

adalnctl.sh: exiting with status 0

.end std out.

.end err out.

****************************************************

Setting service OracleConcMgrTEST_erptest to mode 2 Executing service control script: /d01/oracle/testcomn/admin/scripts/TEST_erptest/adcmctl.sh start Timeout specified in context file: 1000 second(s)

script returned: ****************************************************

You are running adcmctl.sh version 115.20

Starting concurrent manager for TEST ... Starting TEST_0708@TEST Internal Concurrent Manager Default printer is noprint

adcmctl.sh: exiting with status 0

.end std out.

.end err out.

****************************************************

Setting service OracleFormsServer-Forms60TEST_erptest to mode 2 Executing service control script: /d01/oracle/testcomn/admin/scripts/TEST_erptest/adfrmctl.sh start Timeout specified in context file: 100 second(s)

script returned: ****************************************************

You are running adfrmctl.sh version 115.34

Starting forms server for TEST on port 9001.

adfrmctl.sh: exiting with status 0

.end std out.

.end err out.

****************************************************

Setting service OracleReportServer-Rep60_TEST to mode 2 Executing service control script: /d01/oracle/testcomn/admin/scripts/TEST_erptest/adrepctl.sh start Timeout specified in context file: 100 second(s)

script returned: ****************************************************

You are running adrepctl.sh version 115.29

starting Reports Server for TEST on port 7001.

adrepctl.sh: exiting with status 0

.end std out.

.end err out.

****************************************************

Setting service Oracle Metrics Client TEST_erptest to mode 2 Executing service control script: /d01/oracle/testcomn/admin/scripts/TEST_erptest/adfmcctl.sh start Timeout specified in context file: 100 second(s)

script returned: ****************************************************

You are running adfmcctl.sh version 115.17

Starting forms load balancing client for TEST.

adfmcctl.sh: exiting with status 0

.end std out.

.end err out.

****************************************************

Setting service Oracle Metrics Server TEST_erptest to mode 2 Executing service control script: /d01/oracle/testcomn/admin/scripts/TEST_erptest/adfmsctl.sh start Timeout specified in context file: 100 second(s)

script returned: ****************************************************

You are running adfmsctl.sh version 115.13

starting forms  metrics server for TEST.

adfmsctl.sh: exiting with status 0

.end std out.

.end err out.

****************************************************

Setting service Oracle Fulfillment Server TEST_erptest to mode 2 Executing service control script: /d01/oracle/testcomn/admin/scripts/TEST_erptest/jtffmctl.sh start Timeout specified in context file: 100 second(s)

script returned: ****************************************************

You are running jtffmctl.sh version 115.16

Validating Fulfillment patch level via /d01/oracle/testcomn/java Fulfillment patch level validated. Starting Fulfillment Server for TEST on port 9301 ...

jtffmctl.sh: exiting with status 0

.end std out.

.end err out.

****************************************************

Setting service Oracle Discoverer services TEST_erptest to mode 2 Executing service control script: /d01/oracle/testcomn/admin/scripts/TEST_erptest/addisctl.sh start Timeout specified in context file: 300 second(s)

script returned: ****************************************************

addisctl.sh version 115.14

/d01/oracle/testora/8.0.6/vbroker/bin/osagent Started osagent. Osagent logs messages to the file /d01/oracle/testora/8.0.6/discwb4/util/osagent.log. Waiting for OAD to start... Started OAD. OAD logs messages to the file /d01/oracle/testora/8.0.6/discwb4/util/oad.log. Discoverer Locator Started. Locator logs messages to the file /d01/oracle/testora/8.0.6/discwb4/util/locator.log. Cannot bind to OAD. Re-starting...

OAD is stopped Osagent is stopped Locator is stopped Unable to stop gatekeeper. No process-id  file found. Unable to stop any Discoverer Sessions. No process-id  file found. Unable to stop any Discoverer Preference. No process-id  file found. Unable to stop any Discoverer Collector. No process-id  file found. /d01/oracle/testora/8.0.6/vbroker/bin/osagent Started osagent. Osagent logs messages to the file /d01/oracle/testora/8.0.6/discwb4/util/osagent.log. Waiting for OAD to start... Started OAD. OAD logs messages to the file /d01/oracle/testora/8.0.6/discwb4/util/oad.log. Discoverer Locator Started. Locator logs messages to the file /d01/oracle/testora/8.0.6/discwb4/util/locator.log. Registering Discoverer Session oadutil reg: Entry already exists in oad at (192.168.1.112) for: repository_id     =   IDL:DCISessionManager:1.0 object_name       =   erptest.steven.com_8001OracleDiscovererSession4

addisctl.sh: exiting with status 1

.end std out.

.end err out.

****************************************************

 

[Service Control Execution Report] The report format is:   <Service>                                     <Script>         <Status>

  Oracle Apache Server TEST_erptest             adapcctl.sh      Started   OracleTNSListener80APPS_TEST_erptest          adalnctl.sh      Started   OracleConcMgrTEST_erptest                     adcmctl.sh       Started   OracleFormsServer-Forms60TEST_erptest         adfrmctl.sh      Started   OracleReportServer-Rep60_TEST                 adrepctl.sh      Started   Oracle Metrics Client TEST_erptest            adfmcctl.sh      Started   Oracle Metrics Server TEST_erptest            adfmsctl.sh      Started   Oracle Fulfillment Server TEST_erptest        jtffmctl.sh      Started   Oracle Discoverer services TEST_erptest       addisctl.sh      Failed   Oracle Restricted Apache Server TEST_erptest  adaprstctl.sh    Disabled   Oracle Apache Server TEST_erptest for PL/SQL  adapcctl.sh      Disabled   Oracle TCF SocketServer TEST_erptest          adtcfctl.sh      Disabled   Oracle ICSM TEST_erptest                      ieoicsm.sh       Disabled   Oracle iProcurement Bulk Loader TEST_erptest  icxblkctl.sh     Disabled

ServiceControl is exiting with status 1

 

 

 

修复方法如下:重装vmware machine 软件,然后重新设置V8 的IP,启动正常!

Process: com.niksoftware.snapseed, PID: 21483 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: duy: The exception was not handled due to missing onError handler in the subscribe() method call. Further reading: https://github.com/ReactiveX/RxJava/wiki/Error-Handling | java.lang.NullPointerException: items is null 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at eel.a(PG:9) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dwi.cB(PG:8) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at eco.run(PG:7) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dum.run(PG:3) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:959) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:100) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:282) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at android.os.Looper.loop(Looper.java:387) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:9500) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:600) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1005) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: Caused by: java.lang.NullPointerException: items is null 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dvv.a(PG:6) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dty.j(PG:3) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at aew.call(PG:282) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dze.u(PG:3) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dty.t(PG:13) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dzo.u(PG:10) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dty.t(PG:13) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at ebs.u(PG:13) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dty.t(PG:13) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at eag.u(PG:10) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dty.t(PG:13) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dzs.u(PG:9) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dty.t(PG:13) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at eag.u(PG:10) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dty.t(PG:13) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at ebt.q(PG:13) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dug.p(PG:13) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at eda.q(PG:43) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dug.p(PG:13) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at ecu.run(PG:3) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dub.run(PG:10) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at eds.run(PG:14) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at eds.call(PG:1) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at java.util.concurrent.FutureTask.run(FutureTask.java:317) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:348) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at java.lang.Thread.run(Thread.java:1119) 分析一下这个crash的原因
最新发布
08-22
<think>我们有一个来自Snapseed应用(com.niksoftware.snapseed)的崩溃日志。崩溃的原因是RxJava中未处理的NullPointerException。 关键点: 1. 错误信息:"The exception was not handled due to missing onError handler in the subscribe() method call" 这意味着在RxJava的调用链中,有一个可观察对象(Observable)发出了一个错误(onError事件),但没有设置onError处理程序。 2. 具体的异常:java.lang.NullPointerException: items is null 在RxJava中,当操作符要求一个非空的集合或数组,但传入的是null时,会抛出这个异常。 从堆栈跟踪看: - 最开始的调用:在`eel.a`(可能是某个RxJava操作符或自定义操作符)中抛出了NPE,原因是“items is null”。 - 然后错误被传递到`dwi.cB`(可能是RxJava的某个内部处理类),再传递到`eco.run`(可能是调度器线程),最后在`dum.run`(可能是Handler处理的Runnable)中。 - 错误一直传递,直到被RxJava的内部机制捕获,发现没有设置onError处理程序,于是抛给了全局的异常处理器(导致应用崩溃)。 堆栈中还有: Caused by: java.lang.NullPointerException: items is null at dvv.a(PG:6) // 这里可能是源头,比如一个fromIterable操作符传入null at dty.j(PG:3) ... 后续是RxJava的调用链 从堆栈的深度和RxJava操作符的调用链来看,这是一个较长的RxJava流,其中某个操作符期望得到一个非空的集合,但实际传入的是null。 常见原因: 在RxJava中,类似`Observable.fromIterable(null)`会抛出NullPointerException,并提示"items is null"。 解决方案: 1. 在调用`fromIterable`(或类似操作)之前,检查传入的集合是否为null,如果可能为null,则替换为空集合(例如:`list == null ? Collections.emptyList() : list`)。 2. 在订阅的时候,一定要添加onError处理程序,即使只是记录日志,这样就不会导致崩溃。 根据堆栈,我们还可以看到这个RxJava流最终是在主线程的Handler中处理的(android.os.Handler.handleCallback),所以这个流是在主线程上订阅和处理的。 具体步骤: 1. 定位到代码中抛出异常的位置:根据堆栈中的方法名(如dvv.a)和行号(PG:6)去查找对应的代码位置(需要符号表或反编译)。 2. 检查该位置是否使用了`fromIterable`、`fromArray`等操作符,并且传入的参数是否可能为null。 3. 添加空值检查,并确保在RxJava流中处理可能的null值。 另外,由于崩溃发生在主线程,且没有捕获异常,所以导致应用崩溃。 总结: 崩溃的直接原因是RxJava操作符传入了一个null集合(导致NPE),并且在整个RxJava调用链中没有设置onError处理程序,所以错误被传递到默认的异常处理,导致应用崩溃。 如何避免: - 在使用可能为null的集合时,进行空值检查。 - 在订阅RxJava流时,始终添加onError处理程序。 根据以上分析,提出相关问题: 1. RxJava中常见的导致NullPointerException的操作有哪些? 2. 如何在RxJava中正确设置错误处理以避免应用崩溃? 3. 如何通过代码审查或静态分析工具预防RxJava中的空指针异常? 4. 在Android开发中,主线程的RxJava流发生未捕获异常会导致什么后果? 注意:按照要求,在最后输出“§§相关问题§§”并列出3-5个问题。</think>### Crash分析:Snapseed的RxJava未处理空指针异常 #### **直接原因** RxJava操作链中出现`NullPointerException`(`items is null`),且未设置`onError`错误处理回调,导致异常穿透到主线程引发崩溃: ```java // 关键错误点 dvv.a(PG:6) // 引发NPE的源头:items为null dty.j(PG:3) // 操作符调用链 aew.call(PG:282) // RxJava操作符执行 ``` #### **根本原因分层解析** | 层级 | 问题 | 技术细节 | |------|------|----------| | **数据层** | 空集合传递 | • `dvv.a()`方法接收`null`集合<br>• 未做空值检查直接使用<br>• 可能源于网络请求/数据库返回空数据 | | **RxJava层** | 错误处理缺失 | • 未设置`onError`回调(日志明确提示)<br>• `subscribe()`未实现错误处理<br>• 操作符链(`dty.t`多次调用)未捕获异常 | | **线程调度** | 主线程崩溃 | • 最终在`Handler.handleCallback`主线程抛出<br>• 使用`ScheduledThreadPoolExecutor`但未跨线程捕获异常 | #### **关键代码路径** ```plaintext Rx操作链: dvv.a() -> dty.j() -> aew.call() -> dze.u() -> ... -> eda.q() ↓ 线程切换: dub.run() -> eds.run() -> ThreadPoolExecutor ↓ 主线程崩溃: Handler.handleCallback() -> Looper.loop() -> ActivityThread.main() ``` #### **解决方案** ##### 1. 立即修复(空值防御) ```java // 在数据源头添加空检查 Observable.fromIterable(items == null ? Collections.emptyList() : items) .flatMap(item -> ...) ``` ##### 2. 错误处理强化 ```java // 必须添加onError回调 someObservable .subscribe( result -> updateUI(result), error -> { // 错误处理 Log.e("RxError", error.getMessage()); showEmptyView(); } ); ``` ##### 3. 安全操作符封装 ```java // 创建空安全操作符 public static <T> Observable<T> safeFromIterable(List<T> list) { return Observable.defer(() -> list != null ? Observable.fromIterable(list) : Observable.empty() ); } ``` #### **预防措施** 1. **强制错误处理规则** ```gradle // 添加RxJavaLint检查 dependencies { implementation 'nl.littlerobots.rxlint:rxlint:1.7.6' } ``` 2. **单元测试覆盖** ```java @Test public void testNullInputHandling() { // 模拟空数据输入 TestObserver<Item> testObserver = repository.getItems(null).test(); testObserver.assertNoErrors(); // 必须通过 } ``` 3. **代码审查重点** - 所有`subscribe()`调用必须包含`onError` - 集合操作前必须空检查 - 避免在`flatMap`/`map`中直接解引用 #### **根本原因总结** RxJava操作链中`dvv.a()`方法接收到`null`集合(可能源于数据层异常),由于未设置`onError`回调,导致空指针异常穿透整个操作符链,最终在主线程触发未捕获异常崩溃。核心问题是**数据层空值防御缺失**和**RxJava错误处理机制未启用**的双重失误。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值