WARNING: Subscription for node down event still pending

文章详细介绍了如何解决HP-UX环境下使用ASM时出现的单点asm监听异常,导致应用无法正常连接的问题。通过调整监听配置、重启监听服务以及修改本地监听端口等操作,最终成功解决问题并恢复正常连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天晚上接到一个问题:

所管的一套11202的单点asm 监听不正常,应用无法正常连接,系统是hp-ux

登入系统后,查看监听的日志,发现类似WARNING,从网上查

引用:http://www.xifenfei.com/3980.html

SUBSCRIBE_FOR_NODE_DOWN_EVENT_<listener_name>=OFF will prevent the messages 
from being written to the log file and may also prevent the TNS Listener from hanging periodically. 
 
Setting SUBSCRIBE_FOR_NODE_DOWN_<listener_name> to OFF disables 
a necessary RAC functionality(Oracle Notification Service[ONS],fast application notification[FAN]). 
The above workaround is recommended only for non-RAC environments. 
The issue may be present in all 10g and newer installations.

设置SUBSCRIBE_FOR_NODE_DOWN_EVENT_<listener_name>=OFF 将不写这个报警日志,也会预防掉周期性的hanging

会将把rac中的ONS关闭(这是rac的必要服务,不推荐在rac上使用这个参数)。


恰好我处理的当前的库,是使用了asm,但只是一个单点库。所以写入了这个参数。

在监听文件中写入:

SUBSCRIBE_FOR_NODE_DOWN_EVENT_<listener_name>=OFF

reload监听:

lsnrctl reload


问题还没有解决。还是无法连接,将监听都关闭后查看相应端口

netstat -tpn(root 执行)

还是有端口占用,且是listener程序,但该程序已经kill掉了,端口却没有释放

这时候通过修改local_listener 将端口指向了1521默认端口(当前实例平日使用别的端口)

手动执行:alter system register

这时候查看原端口,已经释放掉了

再将local_listener修改回去

alter system register

这时查看相关listener,状态已经正常了




<think>好的,用户想了解PX4中的uORB::Subscription的用法或相关问题。首先,我需要回忆一下PX4的uORB机制。uORB是微对象请求代理,用于模块间通信,而Subscription是用于订阅主题的类。用户可能想知道如何正确使用它,或者遇到了订阅失败、数据更新不及时等问题。 首先,我应该介绍基本用法,比如如何创建Subscription对象,指定主题名称,并检查是否有效。然后,可能需要提到update()和copy()方法的区别,比如update()只是检查新数据,而copy()会获取最新数据。这有助于用户避免常见错误。 接下来,用户可能会遇到初始化失败的情况,这时候需要检查主题是否存在,或者拼写是否正确。另外,多订阅的情况需要注意每个实例单独处理,避免数据覆盖。此外,回调函数的使用也是一个高级用法,需要说明如何设置回调来处理数据到达的事件。 性能方面,订阅频率过高可能导致系统负载增加,需要合理设置轮询间隔。另外,确保发布者存在,否则订阅可能无效。这些都是在实际使用中可能遇到的问题。 最后,生成相关问题可以帮助用户进一步学习,比如如何调试订阅问题,或者如何提高通信效率。需要确保这些问题与Subscription相关,并且覆盖常见的使用场景。 需要检查是否有遗漏的常见问题,比如线程安全或者数据同步的问题,但根据PX4的文档,uORB本身是线程安全的,所以可能不需要特别强调。不过,如果在中断中使用Subscription可能会有问题,需要提醒用户注意上下文。 总结回答的结构:基本用法、关键方法、常见问题及解决、示例代码和相关问题。这样用户能逐步了解如何使用Subscription并解决可能遇到的问题。</think>### uORB::Subscription 用法与问题解析 #### 一、基本用法 uORB::Subscription 是 PX4 中用于接收 uORB 消息的核心类。其典型用法包含以下步骤: 1. **创建订阅对象** 在模块初始化阶段声明订阅对象,需指定订阅的 uORB 主题名称: ```cpp #include <uORB/Subscription.hpp> uORB::Subscription _sensor_sub{ORB_ID(sensor_accel)}; // 订阅加速度计数据 ``` 2. **检查数据有效性** 使用 `advertised()` 方法判断主题是否已发布: ```cpp if (!_sensor_sub.advertised()) { PX4_ERR("sensor_accel not advertised"); return; } ``` 3. **读取数据** 通过 `copy()` 方法获取最新数据副本: ```cpp sensor_accel_s data{}; if (_sensor_sub.copy(&data)) { // 返回 true 表示有新数据 PX4_INFO("Accel: %.2f, %.2f, %.2f", data.x, data.y, data.z); } ``` #### 二、关键方法对比 | 方法 | 作用 | 使用场景 | |-------------|--------------------------------------------------------------------|--------------------------| | `update()` | 检查是否有新数据(不复制数据) | 仅判断数据更新状态 | | `copy()` | 获取最新数据副本(自动标记已读) | 需要处理完整数据时使用 | | `get()` | 获取数据指针(不标记已读) | 需要直接访问共享内存时使用 | #### 三、常见问题与解决方案 1. **订阅初始化失败** - **现象**:`advertised()` 始终返回 false - **原因**:主题未被发布或名称拼写错误 - **解决**: - 确认发布者模块已运行 - 检查 ORB_ID 宏参数是否与 `msg/` 目录下的 `.msg` 文件一致[^1] 2. **数据更新延迟** - **现象**:`copy()` 获取的数据时间戳滞后 - **解决**: - 提高订阅优先级(适用 QURT 系统) ```cpp _sub.set_interval_us(1000); // 设置最小轮询间隔为 1ms ``` - 使用回调机制(需启用 `CONFIG_ORB_USE_CALLBACKS`) ```cpp _sub.register_callback(my_callback_function); ``` 3. **多订阅冲突** - **现象**:多个订阅实例相互影响 - **解决**: - 为每个订阅创建独立实例 - 避免在中断上下文中直接操作订阅 #### 四、调试技巧 ```cpp // 打印主题信息 PX4_INFO("Topic interval: %d us", _sub.get_interval_us()); // 检查订阅队列状态 PX4_INFO("Queue size: %d", _sub.get_queue_size()); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值